{
  "contractName": "IdentityRegistryStorage",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investorAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "country",
          "type": "uint16"
        }
      ],
      "name": "CountryModified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "oldIdentity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "newIdentity",
          "type": "address"
        }
      ],
      "name": "IdentityModified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "identityRegistry",
          "type": "address"
        }
      ],
      "name": "IdentityRegistryBound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "identityRegistry",
          "type": "address"
        }
      ],
      "name": "IdentityRegistryUnbound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investorAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "identity",
          "type": "address"
        }
      ],
      "name": "IdentityStored",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investorAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "identity",
          "type": "address"
        }
      ],
      "name": "IdentityUnstored",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgent",
      "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": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgent",
      "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"
    },
    {
      "inputs": [],
      "name": "linkedIdentityRegistries",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "storedIdentity",
      "outputs": [
        {
          "internalType": "contract IIdentity",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "storedInvestorCountry",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_identity",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_country",
          "type": "uint16"
        }
      ],
      "name": "addIdentityToStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_identity",
          "type": "address"
        }
      ],
      "name": "modifyStoredIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_country",
          "type": "uint16"
        }
      ],
      "name": "modifyStoredInvestorCountry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "removeIdentityFromStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnershipOnIdentityRegistryStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_identityRegistry",
          "type": "address"
        }
      ],
      "name": "bindIdentityRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_identityRegistry",
          "type": "address"
        }
      ],
      "name": "unbindIdentityRegistry",
      "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\":\"_agent\",\"type\":\"address\"}],\"name\":\"AgentAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"AgentRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"investorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"country\",\"type\":\"uint16\"}],\"name\":\"CountryModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"oldIdentity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"newIdentity\",\"type\":\"address\"}],\"name\":\"IdentityModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"identityRegistry\",\"type\":\"address\"}],\"name\":\"IdentityRegistryBound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"identityRegistry\",\"type\":\"address\"}],\"name\":\"IdentityRegistryUnbound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"investorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"identity\",\"type\":\"address\"}],\"name\":\"IdentityStored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"investorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"identity\",\"type\":\"address\"}],\"name\":\"IdentityUnstored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_identity\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_country\",\"type\":\"uint16\"}],\"name\":\"addIdentityToStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_identityRegistry\",\"type\":\"address\"}],\"name\":\"bindIdentityRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"linkedIdentityRegistries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_identity\",\"type\":\"address\"}],\"name\":\"modifyStoredIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_country\",\"type\":\"uint16\"}],\"name\":\"modifyStoredInvestorCountry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"removeIdentityFromStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"storedIdentity\",\"outputs\":[{\"internalType\":\"contract IIdentity\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"storedInvestorCountry\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershipOnIdentityRegistryStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_identityRegistry\",\"type\":\"address\"}],\"name\":\"unbindIdentityRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addIdentityToStorage(address,address,uint16)\":{\"details\":\"See {IIdentityRegistryStorage-addIdentityToStorage}.\"},\"bindIdentityRegistry(address)\":{\"details\":\"See {IIdentityRegistryStorage-bindIdentityRegistry}.\"},\"linkedIdentityRegistries()\":{\"details\":\"See {IIdentityRegistryStorage-linkedIdentityRegistries}.\"},\"modifyStoredIdentity(address,address)\":{\"details\":\"See {IIdentityRegistryStorage-modifyStoredIdentity}.\"},\"modifyStoredInvestorCountry(address,uint16)\":{\"details\":\"See {IIdentityRegistryStorage-modifyStoredInvestorCountry}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeIdentityFromStorage(address)\":{\"details\":\"See {IIdentityRegistryStorage-removeIdentityFromStorage}.\"},\"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.\"},\"storedIdentity(address)\":{\"details\":\"See {IIdentityRegistryStorage-storedIdentity}.\"},\"storedInvestorCountry(address)\":{\"details\":\"See {IIdentityRegistryStorage-storedInvestorCountry}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferOwnershipOnIdentityRegistryStorage(address)\":{\"details\":\"See {IIdentityRegistryStorage-transferOwnershipOnIdentityRegistryStorage}.\"},\"unbindIdentityRegistry(address)\":{\"details\":\"See {IIdentityRegistryStorage-unbindIdentityRegistry}.\"}},\"stateVariables\":{\"identities\":{\"details\":\"mapping between a user address and the corresponding identity\"},\"identityRegistries\":{\"details\":\"array of Identity Registries linked to this storage\"}},\"version\":1},\"userdoc\":{\"events\":{\"CountryModified(address,uint16)\":{\"notice\":\"this event is emitted when an Identity's country has been updated  the event is emitted by the 'updateCountry' function  `investorAddress` is the address on which the country has been updated  `country` is the numeric code (ISO 3166-1) of the new country\"},\"IdentityModified(address,address)\":{\"notice\":\"this event is emitted when an Identity has been updated  the event is emitted by the 'updateIdentity' function  `oldIdentity` is the old Identity contract's address to update  `newIdentity` is the new Identity contract's\"},\"IdentityRegistryBound(address)\":{\"notice\":\"this event is emitted when an Identity Registry is bound to the storage contract  the event is emitted by the 'addIdentityRegistry' function  `identityRegistry` is the address of the identity registry added\"},\"IdentityRegistryUnbound(address)\":{\"notice\":\"this event is emitted when an Identity Registry is unbound from the storage contract  the event is emitted by the 'removeIdentityRegistry' function  `identityRegistry` is the address of the identity registry removed\"},\"IdentityStored(address,address)\":{\"notice\":\"this event is emitted when an Identity is registered into the storage contract.  the event is emitted by the 'registerIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)\"},\"IdentityUnstored(address,address)\":{\"notice\":\"this event is emitted when an Identity is removed from the storage contract.  the event is emitted by the 'deleteIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/registry/IdentityRegistryStorage.sol\":\"IdentityRegistryStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"@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/registry/IIdentityRegistryStorage.sol\":{\"keccak256\":\"0x8cd4de1e77c5da8ca2ff732069bc184aef86bcb94f95a5229e5bd6336abbd06d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f88894a3d046940be03a12cc2da3b3fb6efb51e0461fbea060a9a3190cadcf16\",\"dweb:/ipfs/QmNndZUPdpc83A9LungeAsrcencq3CzTum1tkU6KVdSRNC\"]},\"project:/contracts/registry/IdentityRegistryStorage.sol\":{\"keccak256\":\"0x040e79ab7ae519a3f153bd7ed1a5240474096b4b978e6cfb2d4c50240a932e79\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9c1ae05064603d205344a9fc14110b028c6bb9553dace68fbe7382cae6f3f415\",\"dweb:/ipfs/QmYSxMq8sDHfESxkhorrVtUuLrDpqrhGawVivuHti5x8Lm\"]},\"project:/contracts/roles/AgentRole.sol\":{\"keccak256\":\"0x2a264adff17bd254164e69c882dc033d8b7e9bc6eab01c5e7d2ad26324a2c953\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://585dfaafc7e37d38ff6f0c5ca4a8e0ad1e92b0babd1f54762bfaa8c67c1ec2d7\",\"dweb:/ipfs/QmXVnTvX1zVVQoxSZBgKRptSVz22T2vyXC3P89Bsv9x7Jg\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f048061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100d05760003560e01c80631ffbb064146100d55780635ccbbe49146100fd578063690a49f914610112578063715018a614610125578063727e13bc1461012d5780637988d3a51461017457806384e79842146101b85780638da5cb5b146101cb57806397a012f7146101d357806397a6278e146101e65780639f3418d5146101f9578063a53410dd1461020c578063bf9eb9591461021f578063cf191bcd14610234578063e805cf8614610247578063f2fde38b1461025a575b600080fd5b6100e86100e3366004610c49565b61026d565b60405190151581526020015b60405180910390f35b61011061010b366004610c49565b610280565b005b610110610120366004610c49565b610294565b610110610315565b61016161013b366004610c49565b6001600160a01b0316600090815260026020526040902054600160a01b900461ffff1690565b60405161ffff90911681526020016100f4565b6101a0610182366004610c49565b6001600160a01b039081166000908152600260205260409020541690565b6040516001600160a01b0390911681526020016100f4565b6101106101c6366004610c49565b610329565b6101a0610373565b6101106101e1366004610c49565b610382565b6101106101f4366004610c49565b61051e565b610110610207366004610c84565b610568565b61011061021a366004610cb9565b610627565b61022761075a565b6040516100f49190610d00565b610110610242366004610c49565b6107bc565b610110610255366004610d4d565b6108aa565b610110610268366004610c49565b61098e565b600061027a600183610a04565b92915050565b610288610a87565b6102918161098e565b50565b61029d81610329565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03841690811790915560405190917f500c250171aa20e861b680f93502547b9d436eda7d4c537fc360db6e0c6eedfb91a250565b61031d610a87565b6103276000610ae6565b565b610331610a87565b61033c600182610b36565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b6003546103d65760405162461bcd60e51b815260206004820152601f60248201527f6964656e74697479207265676973747279206973206e6f742073746f7265640060448201526064015b60405180910390fd5b60035460005b818110156104dc57826001600160a01b03166003828154811061040157610401610d86565b6000918252602090912001546001600160a01b0316036104ca576003610428600184610db2565b8154811061043857610438610d86565b600091825260209091200154600380546001600160a01b03909216918390811061046457610464610d86565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038054806104a3576104a3610dc5565b600082815260209020810160001990810180546001600160a01b03191690550190556104dc565b806104d481610ddb565b9150506103dc565b506104e68261051e565b6040516001600160a01b038316907f51f353eb5801583fdf2706e43c045b62fdf6b1566820b349390616363ecf72c990600090a25050565b610526610a87565b610531600182610bb2565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6105713361026d565b61058d5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166105c45760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b038216600081815260026020526040808220805461ffff60a01b1916600160a01b61ffff87169081029190911790915590519092917f20965fcdc6eed7ae398065b40ece4e732ba667992ca819fc54e80e9f2047c4cf91a35050565b6106303361026d565b61064c5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b0382166106725760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0383811660009081526002602052604090205416156106f65760405162461bcd60e51b815260206004820152603360248201527f6964656e7469747920636f6e747261637420616c7265616479206578697374736044820152722c20706c65617365207573652075706461746560681b60648201526084016103cd565b6001600160a01b0383811660008181526002602052604080822080549487166001600160b01b03199095168517600160a01b61ffff881602179055517e30dea7e9c9afaa2e3c9810f2fc9b5181f1bad74ca5a8db85f746a33585e7479190a3505050565b606060038054806020026020016040519081016040528092919081815260200182805480156107b257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610794575b5050505050905090565b6107c53361026d565b6107e15760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03818116600090815260026020526040902054166108575760405162461bcd60e51b815260206004820152602660248201527f796f7520686176656e2774207265676973746572656420616e206964656e74696044820152651d1e481e595d60d21b60648201526084016103cd565b6001600160a01b03811660008181526002602052604080822080546001600160b01b0319169055519091907fca6a4c3370b859312246e7f086284076e557997e10d856b716c23ab67067790b908390a350565b6108b33361026d565b6108cf5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166109065760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b03811661092c5760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0380831660009081526002602052604080822080548585166001600160a01b031982168117909255915191909316929183917f556ce885dfcea52155c773f1ed2e58781c51945c13030ab8f793c61f51d1b8089190a3505050565b610996610a87565b6001600160a01b0381166109fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cd565b61029181610ae6565b60006001600160a01b038216610a675760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016103cd565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610a90610373565b6001600160a01b0316146103275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b408282610a04565b15610b8d5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610bbc8282610a04565b610c125760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b60648201526084016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116811461029157600080fd5b600060208284031215610c5b57600080fd5b8135610c6681610c34565b9392505050565b803561ffff81168114610c7f57600080fd5b919050565b60008060408385031215610c9757600080fd5b8235610ca281610c34565b9150610cb060208401610c6d565b90509250929050565b600080600060608486031215610cce57600080fd5b8335610cd981610c34565b92506020840135610ce981610c34565b9150610cf760408501610c6d565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610d415783516001600160a01b031683529284019291840191600101610d1c565b50909695505050505050565b60008060408385031215610d6057600080fd5b8235610d6b81610c34565b91506020830135610d7b81610c34565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561027a5761027a610d9c565b634e487b7160e01b600052603160045260246000fd5b600060018201610ded57610ded610d9c565b5060010190565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b60208082526024908201527f74686973207573657220686173206e6f206964656e7469747920726567697374604082015263195c995960e21b606082015260800190565b60208082526028908201527f636f6e747261637420616464726573732063616e27742062652061207a65726f604082015267206164647265737360c01b60608201526080019056fea264697066735822122009edceadcb2451f3037e223ade026e82e665d80757b1616e1eddae8e0e637bb264736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d05760003560e01c80631ffbb064146100d55780635ccbbe49146100fd578063690a49f914610112578063715018a614610125578063727e13bc1461012d5780637988d3a51461017457806384e79842146101b85780638da5cb5b146101cb57806397a012f7146101d357806397a6278e146101e65780639f3418d5146101f9578063a53410dd1461020c578063bf9eb9591461021f578063cf191bcd14610234578063e805cf8614610247578063f2fde38b1461025a575b600080fd5b6100e86100e3366004610c49565b61026d565b60405190151581526020015b60405180910390f35b61011061010b366004610c49565b610280565b005b610110610120366004610c49565b610294565b610110610315565b61016161013b366004610c49565b6001600160a01b0316600090815260026020526040902054600160a01b900461ffff1690565b60405161ffff90911681526020016100f4565b6101a0610182366004610c49565b6001600160a01b039081166000908152600260205260409020541690565b6040516001600160a01b0390911681526020016100f4565b6101106101c6366004610c49565b610329565b6101a0610373565b6101106101e1366004610c49565b610382565b6101106101f4366004610c49565b61051e565b610110610207366004610c84565b610568565b61011061021a366004610cb9565b610627565b61022761075a565b6040516100f49190610d00565b610110610242366004610c49565b6107bc565b610110610255366004610d4d565b6108aa565b610110610268366004610c49565b61098e565b600061027a600183610a04565b92915050565b610288610a87565b6102918161098e565b50565b61029d81610329565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03841690811790915560405190917f500c250171aa20e861b680f93502547b9d436eda7d4c537fc360db6e0c6eedfb91a250565b61031d610a87565b6103276000610ae6565b565b610331610a87565b61033c600182610b36565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b6003546103d65760405162461bcd60e51b815260206004820152601f60248201527f6964656e74697479207265676973747279206973206e6f742073746f7265640060448201526064015b60405180910390fd5b60035460005b818110156104dc57826001600160a01b03166003828154811061040157610401610d86565b6000918252602090912001546001600160a01b0316036104ca576003610428600184610db2565b8154811061043857610438610d86565b600091825260209091200154600380546001600160a01b03909216918390811061046457610464610d86565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038054806104a3576104a3610dc5565b600082815260209020810160001990810180546001600160a01b03191690550190556104dc565b806104d481610ddb565b9150506103dc565b506104e68261051e565b6040516001600160a01b038316907f51f353eb5801583fdf2706e43c045b62fdf6b1566820b349390616363ecf72c990600090a25050565b610526610a87565b610531600182610bb2565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6105713361026d565b61058d5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166105c45760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b038216600081815260026020526040808220805461ffff60a01b1916600160a01b61ffff87169081029190911790915590519092917f20965fcdc6eed7ae398065b40ece4e732ba667992ca819fc54e80e9f2047c4cf91a35050565b6106303361026d565b61064c5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b0382166106725760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0383811660009081526002602052604090205416156106f65760405162461bcd60e51b815260206004820152603360248201527f6964656e7469747920636f6e747261637420616c7265616479206578697374736044820152722c20706c65617365207573652075706461746560681b60648201526084016103cd565b6001600160a01b0383811660008181526002602052604080822080549487166001600160b01b03199095168517600160a01b61ffff881602179055517e30dea7e9c9afaa2e3c9810f2fc9b5181f1bad74ca5a8db85f746a33585e7479190a3505050565b606060038054806020026020016040519081016040528092919081815260200182805480156107b257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610794575b5050505050905090565b6107c53361026d565b6107e15760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03818116600090815260026020526040902054166108575760405162461bcd60e51b815260206004820152602660248201527f796f7520686176656e2774207265676973746572656420616e206964656e74696044820152651d1e481e595d60d21b60648201526084016103cd565b6001600160a01b03811660008181526002602052604080822080546001600160b01b0319169055519091907fca6a4c3370b859312246e7f086284076e557997e10d856b716c23ab67067790b908390a350565b6108b33361026d565b6108cf5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166109065760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b03811661092c5760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0380831660009081526002602052604080822080548585166001600160a01b031982168117909255915191909316929183917f556ce885dfcea52155c773f1ed2e58781c51945c13030ab8f793c61f51d1b8089190a3505050565b610996610a87565b6001600160a01b0381166109fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cd565b61029181610ae6565b60006001600160a01b038216610a675760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016103cd565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610a90610373565b6001600160a01b0316146103275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b408282610a04565b15610b8d5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610bbc8282610a04565b610c125760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b60648201526084016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116811461029157600080fd5b600060208284031215610c5b57600080fd5b8135610c6681610c34565b9392505050565b803561ffff81168114610c7f57600080fd5b919050565b60008060408385031215610c9757600080fd5b8235610ca281610c34565b9150610cb060208401610c6d565b90509250929050565b600080600060608486031215610cce57600080fd5b8335610cd981610c34565b92506020840135610ce981610c34565b9150610cf760408501610c6d565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610d415783516001600160a01b031683529284019291840191600101610d1c565b50909695505050505050565b60008060408385031215610d6057600080fd5b8235610d6b81610c34565b91506020830135610d7b81610c34565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561027a5761027a610d9c565b634e487b7160e01b600052603160045260246000fd5b600060018201610ded57610ded610d9c565b5060010190565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b60208082526024908201527f74686973207573657220686173206e6f206964656e7469747920726567697374604082015263195c995960e21b606082015260800190565b60208082526028908201527f636f6e747261637420616464726573732063616e27742062652061207a65726f604082015267206164647265737360c01b60608201526080019056fea264697066735822122009edceadcb2451f3037e223ade026e82e665d80757b1616e1eddae8e0e637bb264736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:8281:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:54"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:54",
                "type": ""
              }
            ],
            "src": "14:131:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "220:177:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "266:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "275:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "278:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "268:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "268:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "268:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "241:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "250:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "237:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "237:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "262:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "233:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "233:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "230:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "291:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "317:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "304:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "304:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "295:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "361:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "336:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "336:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "336:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "376:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "386:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "376:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "186:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "197:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "209:6:54",
                "type": ""
              }
            ],
            "src": "150:247:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "497:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "507:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "519:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "530:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "515:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "515:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "507:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "549:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "574:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "567:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "567:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "560:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "560:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "542:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "542:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "542:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "466:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "477:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "488:4:54",
                "type": ""
              }
            ],
            "src": "402:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "693:89:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "703:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "715:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "726:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "711:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "711:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "703:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "745:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "760:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "768:6:54",
                            "type": "",
                            "value": "0xffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "756:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "756:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "738:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "738:38:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "738:38:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "662:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "673:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "684:4:54",
                "type": ""
              }
            ],
            "src": "594:188:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "906:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "916:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "928:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "939:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "924:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "924:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "916:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "958:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "973:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "994:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "985:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "985:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "998:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "981:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "981:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "969:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "969:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "951:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "951:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "951:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IIdentity_$1743__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "875:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "886:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "897:4:54",
                "type": ""
              }
            ],
            "src": "787:221:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1114:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1124:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1136:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1147:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1132:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1132:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1124:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1166:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1181:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1197:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1202:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1193:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1193:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1206:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1189:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1189:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1177:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1177:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1159:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1159:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1159:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1083:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1094:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1105:4:54",
                "type": ""
              }
            ],
            "src": "1013:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1269:111:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1279:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1301:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1288:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1288:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1279:5:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1358:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1367:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1370:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1360:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1360:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1360:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1330:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1341:5:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1348:6:54",
                                "type": "",
                                "value": "0xffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1337:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1337:18:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "1327:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1327:29:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1320:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1320:37:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1317:57:54"
                }
              ]
            },
            "name": "abi_decode_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1248:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1259:5:54",
                "type": ""
              }
            ],
            "src": "1221:159:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1471:233:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1517:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1526:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1529:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1519:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1519:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1519:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1492:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1501:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1488:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1488:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1513:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1484:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1484:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1481:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1542:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1568:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1555:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1555:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1546:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1612:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1587:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1587:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1587:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1627:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1637:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1627:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1651:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1683:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1694:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1679:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1679:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint16",
                      "nodeType": "YulIdentifier",
                      "src": "1661:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1661:37:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1651:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1429:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1440:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1452:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1460:6:54",
                "type": ""
              }
            ],
            "src": "1385:319:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1830:357:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1876:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1885:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1888:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1878:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1878:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1878:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1851:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1860:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1847:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1847:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1872:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1843:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1843:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1840:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1901:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1927:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1914:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1914:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1905:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1971:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1946:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1946:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1946:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1986:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1996:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1986:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2010:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2042:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2053:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2038:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2038:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2025:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2025:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "2014:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "2091:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2066:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2066:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2066:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2108:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "2118:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2108:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2134:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2166:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2177:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2162:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2162:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint16",
                      "nodeType": "YulIdentifier",
                      "src": "2144:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2144:37:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2134:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_contract$_IIdentity_$1743t_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1780:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1791:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1803:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1811:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1819:6:54",
                "type": ""
              }
            ],
            "src": "1709:478:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2343:507:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2353:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2363:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "2357:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2374:32:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2392:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2403:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2388:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2388:18:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "2378:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2422:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2433:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2415:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2415:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2415:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2445:17:54",
                  "value": {
                    "name": "tail_1",
                    "nodeType": "YulIdentifier",
                    "src": "2456:6:54"
                  },
                  "variables": [
                    {
                      "name": "pos",
                      "nodeType": "YulTypedName",
                      "src": "2449:3:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2471:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2491:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2485:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2485:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "2475:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "2514:6:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2522:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2507:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2507:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2507:22:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2538:25:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2549:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2560:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2545:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2545:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "2538:3:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2572:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2590:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2598:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2586:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2586:15:54"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "2576:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2610:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2619:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "2614:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2678:146:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "2699:3:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "srcPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "2714:6:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "2708:5:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2708:13:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2731:3:54",
                                          "type": "",
                                          "value": "160"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2736:1:54",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "2727:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2727:11:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "2740:1:54",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "2723:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2723:19:54"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "2704:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2704:39:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2692:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2692:52:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2692:52:54"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2757:19:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "2768:3:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "2773:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2764:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2764:12:54"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2757:3:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2789:25:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "2803:6:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "2811:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2799:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2799:15:54"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "2789:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "2640:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2643:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "2637:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2637:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "2651:18:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2653:14:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "2662:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2665:1:54",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2658:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2658:9:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "2653:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "2633:3:54",
                    "statements": []
                  },
                  "src": "2629:195:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2833:11:54",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "2841:3:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2833:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2312:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2323:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2334:4:54",
                "type": ""
              }
            ],
            "src": "2192:658:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2960:301:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3006:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3015:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3018:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3008:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3008:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3008:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2981:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2990:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2977:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2977:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3002:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2973:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2973:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2970:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3031:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3057:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3044:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3044:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3035:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3101:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3076:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3076:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3076:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3116:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3126:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3116:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3140:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3172:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3183:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3168:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3168:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3155:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3155:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "3144:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "3221:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3196:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3196:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3196:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3238:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "3248:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3238:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2918:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2929:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2941:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2949:6:54",
                "type": ""
              }
            ],
            "src": "2855:406:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3440:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3457:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3468:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3450:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3450:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3450:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3491:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3502:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3487:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3487:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3507:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3480:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3480:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3480:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3530:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3541:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3526:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3526:18:54"
                      },
                      {
                        "hexValue": "6964656e74697479207265676973747279206973206e6f742073746f726564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3546:33:54",
                        "type": "",
                        "value": "identity registry is not stored"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3519:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3519:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3519:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3589:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3601:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3612:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3597:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3597:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3589:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_b93320b45eec031c532d533bc5a30d598b97d9cdd9618c549c011e4c074c85cc__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3417:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3431:4:54",
                "type": ""
              }
            ],
            "src": "3266:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3658:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3675:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3682:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3687:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3678:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3678:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3668:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3668:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3668:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3715:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3718:4:54",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3708:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3708:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3708:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3739:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3742:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "3732:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3732:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3732:15:54"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "3626:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3790:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3807:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3814:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3819:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3810:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3810:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3800:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3800:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3800:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3847:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3850:4:54",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3840:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3840:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3840:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3871:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3874:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "3864:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3864:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3864:15:54"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "3758:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3939:79:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3949:17:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3961:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "3964:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "3957:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3957:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "3949:4:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3990:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "3992:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3992:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3992:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nodeType": "YulIdentifier",
                        "src": "3981:4:54"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3987:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3978:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3978:11:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3975:37:54"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "3921:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "3924:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "3930:4:54",
                "type": ""
              }
            ],
            "src": "3890:128:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4055:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4072:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4079:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4084:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "4075:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4075:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4065:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4065:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4065:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4112:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4115:4:54",
                        "type": "",
                        "value": "0x31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4105:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4105:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4105:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4136:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4139:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "4129:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4129:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4129:15:54"
                }
              ]
            },
            "name": "panic_error_0x31",
            "nodeType": "YulFunctionDefinition",
            "src": "4023:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4202:88:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4233:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "4235:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4235:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4235:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4218:5:54"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4229:1:54",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "4225:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4225:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "4215:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4215:17:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4212:43:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4264:20:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4275:5:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4282:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4271:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4271:13:54"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "4264:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4184:5:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "4194:3:54",
                "type": ""
              }
            ],
            "src": "4155:135:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4469:236:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4486:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4497:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4479:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4479:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4479:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4520:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4531:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4516:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4516:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4536:2:54",
                        "type": "",
                        "value": "46"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4509:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4509:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4509:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4559:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4570:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4555:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4555:18:54"
                      },
                      {
                        "hexValue": "4167656e74526f6c653a2063616c6c657220646f6573206e6f74206861766520",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4575:34:54",
                        "type": "",
                        "value": "AgentRole: caller does not have "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4548:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4548:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4548:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4630:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4641:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4626:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4626:18:54"
                      },
                      {
                        "hexValue": "746865204167656e7420726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4646:16:54",
                        "type": "",
                        "value": "the Agent role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4619:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4619:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4619:44:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4672:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4684:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4695:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4680:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4680:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4672:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_74a06637aa9b3f007e79b88b2581192c891126ad4f09db67db18ede3d2b5435c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4446:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4460:4:54",
                "type": ""
              }
            ],
            "src": "4295:410:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4884:226:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4901:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4912:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4894:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4894:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4894:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4935:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4946:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4931:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4931:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4951:2:54",
                        "type": "",
                        "value": "36"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4924:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4924:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4924:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4974:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4985:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4970:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4970:18:54"
                      },
                      {
                        "hexValue": "74686973207573657220686173206e6f206964656e7469747920726567697374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4990:34:54",
                        "type": "",
                        "value": "this user has no identity regist"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4963:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4963:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4963:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5045:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5056:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5041:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5041:18:54"
                      },
                      {
                        "hexValue": "65726564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5061:6:54",
                        "type": "",
                        "value": "ered"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5034:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5034:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5034:34:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5077:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5089:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5100:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5085:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5085:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5077:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_359ffa89f021eeb161191650ba44a6dabc09d83a888c0d08ffda762c4706cee1__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4861:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4875:4:54",
                "type": ""
              }
            ],
            "src": "4710:400:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5289:230:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5306:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5317:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5299:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5299:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5299:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5340:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5351:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5336:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5336:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5356:2:54",
                        "type": "",
                        "value": "40"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5329:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5329:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5329:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5379:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5390:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5375:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5375:18:54"
                      },
                      {
                        "hexValue": "636f6e747261637420616464726573732063616e27742062652061207a65726f",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5395:34:54",
                        "type": "",
                        "value": "contract address can't be a zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5368:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5368:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5368:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5450:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5461:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5446:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5446:18:54"
                      },
                      {
                        "hexValue": "2061646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5466:10:54",
                        "type": "",
                        "value": " address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5439:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5439:38:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5439:38:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5486:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5498:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5509:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5494:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5494:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5486:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_314ef5c8b61d6eefa1e6923e3945ebb4c3411155c8152476346dd6297d263859__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5266:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5280:4:54",
                "type": ""
              }
            ],
            "src": "5115:404:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5698:241:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5715:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5726:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5708:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5708:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5708:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5749:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5760:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5745:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5745:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5765:2:54",
                        "type": "",
                        "value": "51"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5738:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5738:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5738:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5788:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5799:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5784:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5784:18:54"
                      },
                      {
                        "hexValue": "6964656e7469747920636f6e747261637420616c726561647920657869737473",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5804:34:54",
                        "type": "",
                        "value": "identity contract already exists"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5777:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5777:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5777:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5859:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5870:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5855:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5855:18:54"
                      },
                      {
                        "hexValue": "2c20706c656173652075736520757064617465",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5875:21:54",
                        "type": "",
                        "value": ", please use update"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5848:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5848:49:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5848:49:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5906:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5918:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5929:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5914:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5914:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5906:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d8cb1dfb20834a1f7a90296f90ee8620de7350a19c62237dc8b460442b8acdc8__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5675:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5689:4:54",
                "type": ""
              }
            ],
            "src": "5524:415:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6118:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6135:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6146:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6128:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6128:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6128:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6169:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6180:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6165:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6165:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6185:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6158:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6158:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6158:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6208:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6219:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6204:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6204:18:54"
                      },
                      {
                        "hexValue": "796f7520686176656e2774207265676973746572656420616e206964656e7469",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6224:34:54",
                        "type": "",
                        "value": "you haven't registered an identi"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6197:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6197:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6197:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6279:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6290:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6275:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6275:18:54"
                      },
                      {
                        "hexValue": "747920796574",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6295:8:54",
                        "type": "",
                        "value": "ty yet"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6268:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6268:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6268:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6313:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6325:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6336:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6321:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6321:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6313:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_2f124208c59f68758303fe323a6df8b006faf26fcb5d56dd543fdafcbf0ac511__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6095:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6109:4:54",
                "type": ""
              }
            ],
            "src": "5944:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6525:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6542:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6553:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6535:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6535:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6535:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6576:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6587:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6572:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6572:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6592:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6565:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6565:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6565:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6615:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6626:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6611:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6611:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6631:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6604:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6604:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6604:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6686:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6697:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6682:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6682:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6702:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6675:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6675:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6675:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6720:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6732:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6743:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6728:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6728:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6720:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6502:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6516:4:54",
                "type": ""
              }
            ],
            "src": "6351:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6932:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6949:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6960:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6942:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6942:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6942:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6983:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6994:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6979:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6979:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6999:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6972:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6972:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6972:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7022:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7033:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7018:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7018:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7038:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7011:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7011:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7011:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7093:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7104:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7089:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7089:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7109:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7082:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7082:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7082:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7123:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7135:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7146:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7131:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7131:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7123:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6909:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6923:4:54",
                "type": ""
              }
            ],
            "src": "6758:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7335:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7352:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7363:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7345:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7345:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7345:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7386:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7397:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7382:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7382:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7402:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7375:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7375:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7375:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7425:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7436:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7421:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7421:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7441:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7414:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7414:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7414:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7485:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7497:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7508:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7493:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7493:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7485:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7312:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7326:4:54",
                "type": ""
              }
            ],
            "src": "7161:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7696:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7713:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7724:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7706:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7706:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7706:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7747:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7758:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7743:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7743:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7763:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7736:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7736:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7736:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7786:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7797:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7782:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7782:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7802:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7775:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7775:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7775:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7845:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7857:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7868:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7853:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7853:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7845:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7673:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7687:4:54",
                "type": ""
              }
            ],
            "src": "7522:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8056:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8073:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8084:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8066:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8066:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8066:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8107:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8118:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8103:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8103:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8123:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8096:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8096:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8096:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8146:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8157:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8142:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8142:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8162:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8135:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8135:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8135:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8217:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8228:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8213:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8213:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8233:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8206:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8206:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8206:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8246:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8258:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8269:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8254:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8254:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8246:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8033:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8047:4:54",
                "type": ""
              }
            ],
            "src": "7882:397:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\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        validator_revert_address(value)\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_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_encode_tuple_t_contract$_IIdentity_$1743__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_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_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint16(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := abi_decode_uint16(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_contract$_IIdentity_$1743t_uint16(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_uint16(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_addresst_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_stringliteral_b93320b45eec031c532d533bc5a30d598b97d9cdd9618c549c011e4c074c85cc__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), \"identity registry is not stored\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_74a06637aa9b3f007e79b88b2581192c891126ad4f09db67db18ede3d2b5435c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"AgentRole: caller does not have \")\n        mstore(add(headStart, 96), \"the Agent role\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_359ffa89f021eeb161191650ba44a6dabc09d83a888c0d08ffda762c4706cee1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"this user has no identity regist\")\n        mstore(add(headStart, 96), \"ered\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_314ef5c8b61d6eefa1e6923e3945ebb4c3411155c8152476346dd6297d263859__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 40)\n        mstore(add(headStart, 64), \"contract address can't be a zero\")\n        mstore(add(headStart, 96), \" address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_d8cb1dfb20834a1f7a90296f90ee8620de7350a19c62237dc8b460442b8acdc8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 51)\n        mstore(add(headStart, 64), \"identity contract already exists\")\n        mstore(add(headStart, 96), \", please use update\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2f124208c59f68758303fe323a6df8b006faf26fcb5d56dd543fdafcbf0ac511__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), \"you haven't registered an identi\")\n        mstore(add(headStart, 96), \"ty yet\")\n        tail := add(headStart, 128)\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_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    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}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1269:4582:40:-:0;;;;;;;;;;;;-1:-1:-1;936:32:13;719:10:20;936:18:13;:32::i;:::-;1269:4582:40;;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;1269:4582:40:-;;;;;;;",
  "deployedSourceMap": "1269:4582:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:103:43;;;;;;:::i;:::-;;:::i;:::-;;;567:14:54;;560:22;542:41;;530:2;515:18;1525:103:43;;;;;;;;4715:144:40;;;;;;:::i;:::-;;:::i;:::-;;4947:226;;;;;;:::i;:::-;;:::i;1831:101:13:-;;;:::i;2301:157:40:-;;;;;;:::i;:::-;-1:-1:-1;;;;;2411:24:40;2386:6;2411:24;;;:10;:24;;;;;:40;-1:-1:-1;;;2411:40:40;;;;;2301:157;;;;768:6:54;756:19;;;738:38;;726:2;711:18;2301:157:40;594:188:54;2058:154:40;;;;;;:::i;:::-;-1:-1:-1;;;;;2164:24:40;;;2136:9;2164:24;;;:10;:24;;;;;:41;;;2058:154;;;;-1:-1:-1;;;;;969:32:54;;;951:51;;939:2;924:18;2058:154:40;787:221:54;1634:120:43;;;;;;:::i;:::-;;:::i;1201:85:13:-;;;:::i;5263:586:40:-;;;;;;:::i;:::-;;:::i;1760:128:43:-;;;;;;:::i;:::-;;:::i;3816:349:40:-;;;;;;:::i;:::-;;:::i;2546:567::-;;;;;;:::i;:::-;;:::i;1848:128::-;;;:::i;:::-;;;;;;;:::i;4258:347::-;;;;;;:::i;:::-;;:::i;3201:520::-;;;;;;:::i;:::-;;:::i;2081:198:13:-;;;;;;:::i;:::-;;:::i;1525:103:43:-;1579:4;1602:19;:7;1614:6;1602:11;:19::i;:::-;1595:26;1525:103;-1:-1:-1;;1525:103:43:o;4715:144:40:-;1094:13:13;:11;:13::i;:::-;4824:28:40::1;4842:9;4824:17;:28::i;:::-;4715:144:::0;:::o;4947:226::-;5032:27;5041:17;5032:8;:27::i;:::-;5069:18;:42;;;;;;;-1:-1:-1;5069:42:40;;;;;;;-1:-1:-1;;;;;;5069:42:40;-1:-1:-1;;;;;5069:42:40;;;;;;;;5126:40;;5069:42;;5126:40;;;4947:226;:::o;1831:101:13:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1634:120:43:-;1094:13:13;:11;:13::i;:::-;1695:19:43::1;:7;1707:6:::0;1695:11:::1;:19::i;:::-;1729:18;::::0;-1:-1:-1;;;;;1729:18:43;::::1;::::0;::::1;::::0;;;::::1;1634:120:::0;:::o;1201:85:13:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;5263:586:40:-;5358:18;:25;5350:73;;;;-1:-1:-1;;;5350:73:40;;3468:2:54;5350:73:40;;;3450:21:54;3507:2;3487:18;;;3480:30;3546:33;3526:18;;;3519:61;3597:18;;5350:73:40;;;;;;;;;5450:18;:25;5433:14;5485:261;5509:6;5505:1;:10;5485:261;;;5565:17;-1:-1:-1;;;;;5540:42:40;:18;5559:1;5540:21;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5540:21:40;:42;5536:200;;5626:18;5645:10;5654:1;5645:6;:10;:::i;:::-;5626:30;;;;;;;;:::i;:::-;;;;;;;;;;;5602:18;:21;;-1:-1:-1;;;;;5626:30:40;;;;5621:1;;5602:21;;;;;;:::i;:::-;;;;;;;;;:54;;;;;-1:-1:-1;;;;;5602:54:40;;;;;-1:-1:-1;;;;;5602:54:40;;;;;;5674:18;:24;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;5674:24:40;;;;;-1:-1:-1;;;;;;5674:24:40;;;;;;5716:5;;5536:200;5517:3;;;;:::i;:::-;;;;5485:261;;;;5755:30;5767:17;5755:11;:30::i;:::-;5800:42;;-1:-1:-1;;;;;5800:42:40;;;;;;;;5340:509;5263:586;:::o;1760:128:43:-;1094:13:13;:11;:13::i;:::-;1824:22:43::1;:7;1839:6:::0;1824:14:::1;:22::i;:::-;1861:20;::::0;-1:-1:-1;;;;;1861:20:43;::::1;::::0;::::1;::::0;;;::::1;1760:128:::0;:::o;3816:349:40:-;1431:19:43;1439:10;1431:7;:19::i;:::-;1423:78;;;;-1:-1:-1;;;1423:78:43;;;;;;;:::i;:::-;-1:-1:-1;;;;;3946:24:40;;::::1;4000:1;3946:24:::0;;;:10:::1;:24;::::0;;;;:41;::::1;3930:113;;;;-1:-1:-1::0;;;3930:113:40::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4053:24:40;::::1;;::::0;;;:10:::1;:24;::::0;;;;;:51;;-1:-1:-1;;;;4053:51:40::1;-1:-1:-1::0;;;4053:51:40::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;4119:39;;4053:51;;:24;4119:39:::1;::::0;::::1;3816:349:::0;;:::o;2546:567::-;1431:19:43;1439:10;1431:7;:19::i;:::-;1423:78;;;;-1:-1:-1;;;1423:78:43;;;;;;;:::i;:::-;-1:-1:-1;;;;;2712:32:40;::::1;2704:86;;;;-1:-1:-1::0;;;2704:86:40::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2816:24:40;;::::1;2870:1;2816:24:::0;;;:10:::1;:24;::::0;;;;:41;::::1;2808:64:::0;2800:128:::1;;;::::0;-1:-1:-1;;;2800:128:40;;5726:2:54;2800:128:40::1;::::0;::::1;5708:21:54::0;5765:2;5745:18;;;5738:30;5804:34;5784:18;;;5777:62;-1:-1:-1;;;5855:18:54;;;5848:49;5914:19;;2800:128:40::1;5524:415:54::0;2800:128:40::1;-1:-1:-1::0;;;;;2938:24:40;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;:53;;;;::::1;-1:-1:-1::0;;;;;;3001:51:40;;;;;-1:-1:-1;;;3001:51:40::1;::::0;::::1;;;::::0;;3067:39;::::1;::::0;2938:24;3067:39:::1;2546:567:::0;;;:::o;1848:128::-;1916:16;1951:18;1944:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1944:25:40;;;;;;;;;;;;;;;;;;;;;;;1848:128;:::o;4258:347::-;1431:19:43;1439:10;1431:7;:19::i;:::-;1423:78;;;;-1:-1:-1;;;1423:78:43;;;;;;;:::i;:::-;-1:-1:-1;;;;;4369:24:40;;::::1;4423:1;4369:24:::0;;;:10:::1;:24;::::0;;;;:41;::::1;4353:116;;;::::0;-1:-1:-1;;;4353:116:40;;6146:2:54;4353:116:40::1;::::0;::::1;6128:21:54::0;6185:2;6165:18;;;6158:30;6224:34;6204:18;;;6197:62;-1:-1:-1;;;6275:18:54;;;6268:36;6321:19;;4353:116:40::1;5944:402:54::0;4353:116:40::1;-1:-1:-1::0;;;;;4486:24:40;::::1;;::::0;;;:10:::1;:24;::::0;;;;;4479:31;;-1:-1:-1;;;;;;4479:31:40;;;4525:73;4486:24;;;4525:73:::1;::::0;4486:24;;4525:73:::1;4258:347:::0;:::o;3201:520::-;1431:19:43;1439:10;1431:7;:19::i;:::-;1423:78;;;;-1:-1:-1;;;1423:78:43;;;;;;;:::i;:::-;-1:-1:-1;;;;;3328:24:40;;::::1;3382:1;3328:24:::0;;;:10:::1;:24;::::0;;;;:41;::::1;3312:113;;;;-1:-1:-1::0;;;3312:113:40::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3443:32:40;::::1;3435:86;;;;-1:-1:-1::0;;;3435:86:40::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3555:24:40;;::::1;3531:21;3555:24:::0;;;:10:::1;:24;::::0;;;;;:41;;3606:53;;::::1;-1:-1:-1::0;;;;;;3606:53:40;::::1;::::0;::::1;::::0;;;3674:40;;3555:41;;;::::1;::::0;3606:53;3555:41;;3674:40:::1;::::0;3531:21;3674:40:::1;3302:419;3201:520:::0;;:::o;2081:198:13:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;6553:2:54;2161:73:13::1;::::0;::::1;6535:21:54::0;6592:2;6572:18;;;6565:30;6631:34;6611:18;;;6604:62;-1:-1:-1;;;6682:18:54;;;6675:36;6728:19;;2161:73:13::1;6351:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;815:200:50:-:0;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;6960:2:54;903:68:50;;;6942:21:54;6999:2;6979:18;;;6972:30;7038:34;7018:18;;;7011:62;-1:-1:-1;;;7089:18:54;;;7082:32;7131:19;;903:68:50;6758: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;;7363:2:54;1414:68:13;;;7345:21:54;;;7382:18;;;7375:30;7441:34;7421:18;;;7414:62;7493:18;;1414:68:13;7161: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;;7724:2:54;364:63:50;;;7706:21:54;7763:2;7743:18;;;7736:30;7802:33;7782:18;;;7775:61;7853:18;;364:63:50;7522: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;546:180::-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;8084:2:54;617:64:50;;;8066:21:54;8123:2;8103:18;;;8096:30;8162:34;8142:18;;;8135:62;-1:-1:-1;;;8213:18:54;;;8206:31;8254:19;;617:64:50;7882: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;14:131:54:-;-1:-1:-1;;;;;89:31:54;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:54:o;1221:159::-;1288:20;;1348:6;1337:18;;1327:29;;1317:57;;1370:1;1367;1360:12;1317:57;1221:159;;;:::o;1385:319::-;1452:6;1460;1513:2;1501:9;1492:7;1488:23;1484:32;1481:52;;;1529:1;1526;1519:12;1481:52;1568:9;1555:23;1587:31;1612:5;1587:31;:::i;:::-;1637:5;-1:-1:-1;1661:37:54;1694:2;1679:18;;1661:37;:::i;:::-;1651:47;;1385:319;;;;;:::o;1709:478::-;1803:6;1811;1819;1872:2;1860:9;1851:7;1847:23;1843:32;1840:52;;;1888:1;1885;1878:12;1840:52;1927:9;1914:23;1946:31;1971:5;1946:31;:::i;:::-;1996:5;-1:-1:-1;2053:2:54;2038:18;;2025:32;2066:33;2025:32;2066:33;:::i;:::-;2118:7;-1:-1:-1;2144:37:54;2177:2;2162:18;;2144:37;:::i;:::-;2134:47;;1709:478;;;;;:::o;2192:658::-;2363:2;2415:21;;;2485:13;;2388:18;;;2507:22;;;2334:4;;2363:2;2586:15;;;;2560:2;2545:18;;;2334:4;2629:195;2643:6;2640:1;2637:13;2629:195;;;2708:13;;-1:-1:-1;;;;;2704:39:54;2692:52;;2799:15;;;;2764:12;;;;2740:1;2658:9;2629:195;;;-1:-1:-1;2841:3:54;;2192:658;-1:-1:-1;;;;;;2192:658:54:o;2855:406::-;2941:6;2949;3002:2;2990:9;2981:7;2977:23;2973:32;2970:52;;;3018:1;3015;3008:12;2970:52;3057:9;3044:23;3076:31;3101:5;3076:31;:::i;:::-;3126:5;-1:-1:-1;3183:2:54;3168:18;;3155:32;3196:33;3155:32;3196:33;:::i;:::-;3248:7;3238:17;;;2855:406;;;;;:::o;3626:127::-;3687:10;3682:3;3678:20;3675:1;3668:31;3718:4;3715:1;3708:15;3742:4;3739:1;3732:15;3758:127;3819:10;3814:3;3810:20;3807:1;3800:31;3850:4;3847:1;3840:15;3874:4;3871:1;3864:15;3890:128;3957:9;;;3978:11;;;3975:37;;;3992:18;;:::i;4023:127::-;4084:10;4079:3;4075:20;4072:1;4065:31;4115:4;4112:1;4105:15;4139:4;4136:1;4129:15;4155:135;4194:3;4215:17;;;4212:43;;4235:18;;:::i;:::-;-1:-1:-1;4282:1:54;4271:13;;4155:135::o;4295:410::-;4497:2;4479:21;;;4536:2;4516:18;;;4509:30;4575:34;4570:2;4555:18;;4548:62;-1:-1:-1;;;4641:2:54;4626:18;;4619:44;4695:3;4680:19;;4295:410::o;4710:400::-;4912:2;4894:21;;;4951:2;4931:18;;;4924:30;4990:34;4985:2;4970:18;;4963:62;-1:-1:-1;;;5056:2:54;5041:18;;5034:34;5100:3;5085:19;;4710:400::o;5115:404::-;5317:2;5299:21;;;5356:2;5336:18;;;5329:30;5395:34;5390:2;5375:18;;5368:62;-1:-1:-1;;;5461:2:54;5446:18;;5439:38;5509:3;5494:19;;5115:404::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 '@onchain-id/solidity/contracts/interface/IIdentity.sol';\n\nimport '../roles/AgentRole.sol';\nimport '../registry/IIdentityRegistryStorage.sol';\n\ncontract IdentityRegistryStorage is IIdentityRegistryStorage, AgentRole {\n    /// @dev struct containing the identity contract and the country of the user\n    struct Identity {\n        IIdentity identityContract;\n        uint16 investorCountry;\n    }\n\n    /// @dev mapping between a user address and the corresponding identity\n    mapping(address => Identity) private identities;\n\n    /// @dev array of Identity Registries linked to this storage\n    address[] private identityRegistries;\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-linkedIdentityRegistries}.\n     */\n    function linkedIdentityRegistries() external view override returns (address[] memory) {\n        return identityRegistries;\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-storedIdentity}.\n     */\n    function storedIdentity(address _userAddress) external view override returns (IIdentity) {\n        return identities[_userAddress].identityContract;\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-storedInvestorCountry}.\n     */\n    function storedInvestorCountry(address _userAddress) external view override returns (uint16) {\n        return identities[_userAddress].investorCountry;\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-addIdentityToStorage}.\n     */\n    function addIdentityToStorage(\n        address _userAddress,\n        IIdentity _identity,\n        uint16 _country\n    ) external override onlyAgent {\n        require(address(_identity) != address(0), 'contract address can\\'t be a zero address');\n        require(address(identities[_userAddress].identityContract) == address(0), 'identity contract already exists, please use update');\n        identities[_userAddress].identityContract = _identity;\n        identities[_userAddress].investorCountry = _country;\n        emit IdentityStored(_userAddress, _identity);\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-modifyStoredIdentity}.\n     */\n    function modifyStoredIdentity(address _userAddress, IIdentity _identity) external override onlyAgent {\n        require(address(identities[_userAddress].identityContract) != address(0), 'this user has no identity registered');\n        require(address(_identity) != address(0), 'contract address can\\'t be a zero address');\n        IIdentity oldIdentity = identities[_userAddress].identityContract;\n        identities[_userAddress].identityContract = _identity;\n        emit IdentityModified(oldIdentity, _identity);\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-modifyStoredInvestorCountry}.\n     */\n    function modifyStoredInvestorCountry(address _userAddress, uint16 _country) external override onlyAgent {\n        require(address(identities[_userAddress].identityContract) != address(0), 'this user has no identity registered');\n        identities[_userAddress].investorCountry = _country;\n        emit CountryModified(_userAddress, _country);\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-removeIdentityFromStorage}.\n     */\n    function removeIdentityFromStorage(address _userAddress) external override onlyAgent {\n        require(address(identities[_userAddress].identityContract) != address(0), 'you haven\\'t registered an identity yet');\n        delete identities[_userAddress];\n        emit IdentityUnstored(_userAddress, identities[_userAddress].identityContract);\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-transferOwnershipOnIdentityRegistryStorage}.\n     */\n    function transferOwnershipOnIdentityRegistryStorage(address _newOwner) external override onlyOwner {\n        transferOwnership(_newOwner);\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-bindIdentityRegistry}.\n     */\n    function bindIdentityRegistry(address _identityRegistry) external override {\n        addAgent(_identityRegistry);\n        identityRegistries.push(_identityRegistry);\n        emit IdentityRegistryBound(_identityRegistry);\n    }\n\n    /**\n     *  @dev See {IIdentityRegistryStorage-unbindIdentityRegistry}.\n     */\n    function unbindIdentityRegistry(address _identityRegistry) external override {\n        require(identityRegistries.length > 0, 'identity registry is not stored');\n        uint256 length = identityRegistries.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (identityRegistries[i] == _identityRegistry) {\n                identityRegistries[i] = identityRegistries[length - 1];\n                identityRegistries.pop();\n                break;\n            }\n        }\n        removeAgent(_identityRegistry);\n        emit IdentityRegistryUnbound(_identityRegistry);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/registry/IdentityRegistryStorage.sol",
  "ast": {
    "absolutePath": "project:/contracts/registry/IdentityRegistryStorage.sol",
    "exportedSymbols": {
      "AgentRole": [
        9120
      ],
      "Context": [
        3401
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "IdentityRegistryStorage": [
        7862
      ],
      "Ownable": [
        2505
      ],
      "Roles": [
        11901
      ]
    },
    "id": 7863,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7492,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:40"
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "file": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "id": 7493,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 7863,
        "sourceUnit": 1744,
        "src": "1118:64:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/AgentRole.sol",
        "file": "../roles/AgentRole.sol",
        "id": 7494,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 7863,
        "sourceUnit": 9121,
        "src": "1184:32:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IIdentityRegistryStorage.sol",
        "file": "../registry/IIdentityRegistryStorage.sol",
        "id": 7495,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 7863,
        "sourceUnit": 6760,
        "src": "1217:50:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 7496,
              "name": "IIdentityRegistryStorage",
              "nameLocations": [
                "1305:24:40"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 6759,
              "src": "1305:24:40"
            },
            "id": 7497,
            "nodeType": "InheritanceSpecifier",
            "src": "1305:24:40"
          },
          {
            "baseName": {
              "id": 7498,
              "name": "AgentRole",
              "nameLocations": [
                "1331:9:40"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9120,
              "src": "1331:9:40"
            },
            "id": 7499,
            "nodeType": "InheritanceSpecifier",
            "src": "1331:9:40"
          }
        ],
        "canonicalName": "IdentityRegistryStorage",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 7862,
        "linearizedBaseContracts": [
          7862,
          9120,
          2505,
          3401,
          6759
        ],
        "name": "IdentityRegistryStorage",
        "nameLocation": "1278:23:40",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "IdentityRegistryStorage.Identity",
            "id": 7505,
            "members": [
              {
                "constant": false,
                "id": 7502,
                "mutability": "mutable",
                "name": "identityContract",
                "nameLocation": "1464:16:40",
                "nodeType": "VariableDeclaration",
                "scope": 7505,
                "src": "1454:26:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IIdentity_$1743",
                  "typeString": "contract IIdentity"
                },
                "typeName": {
                  "id": 7501,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 7500,
                    "name": "IIdentity",
                    "nameLocations": [
                      "1454:9:40"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1743,
                    "src": "1454:9:40"
                  },
                  "referencedDeclaration": 1743,
                  "src": "1454:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7504,
                "mutability": "mutable",
                "name": "investorCountry",
                "nameLocation": "1497:15:40",
                "nodeType": "VariableDeclaration",
                "scope": 7505,
                "src": "1490:22:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 7503,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1490:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Identity",
            "nameLocation": "1435:8:40",
            "nodeType": "StructDefinition",
            "scope": 7862,
            "src": "1428:91:40",
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 7506,
              "nodeType": "StructuredDocumentation",
              "src": "1525:70:40",
              "text": "@dev mapping between a user address and the corresponding identity"
            },
            "id": 7511,
            "mutability": "mutable",
            "name": "identities",
            "nameLocation": "1637:10:40",
            "nodeType": "VariableDeclaration",
            "scope": 7862,
            "src": "1600:47:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
              "typeString": "mapping(address => struct IdentityRegistryStorage.Identity)"
            },
            "typeName": {
              "id": 7510,
              "keyType": {
                "id": 7507,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1608:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1600:28:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                "typeString": "mapping(address => struct IdentityRegistryStorage.Identity)"
              },
              "valueType": {
                "id": 7509,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 7508,
                  "name": "Identity",
                  "nameLocations": [
                    "1619:8:40"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7505,
                  "src": "1619:8:40"
                },
                "referencedDeclaration": 7505,
                "src": "1619:8:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Identity_$7505_storage_ptr",
                  "typeString": "struct IdentityRegistryStorage.Identity"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "documentation": {
              "id": 7512,
              "nodeType": "StructuredDocumentation",
              "src": "1654:60:40",
              "text": "@dev array of Identity Registries linked to this storage"
            },
            "id": 7515,
            "mutability": "mutable",
            "name": "identityRegistries",
            "nameLocation": "1737:18:40",
            "nodeType": "VariableDeclaration",
            "scope": 7862,
            "src": "1719:36:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 7513,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1719:7:40",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 7514,
              "nodeType": "ArrayTypeName",
              "src": "1719:9:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              6689
            ],
            "body": {
              "id": 7525,
              "nodeType": "Block",
              "src": "1934:42:40",
              "statements": [
                {
                  "expression": {
                    "id": 7523,
                    "name": "identityRegistries",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7515,
                    "src": "1951:18:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "functionReturnParameters": 7522,
                  "id": 7524,
                  "nodeType": "Return",
                  "src": "1944:25:40"
                }
              ]
            },
            "documentation": {
              "id": 7516,
              "nodeType": "StructuredDocumentation",
              "src": "1762:81:40",
              "text": "  @dev See {IIdentityRegistryStorage-linkedIdentityRegistries}."
            },
            "functionSelector": "bf9eb959",
            "id": 7526,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "linkedIdentityRegistries",
            "nameLocation": "1857:24:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7518,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1898:8:40"
            },
            "parameters": {
              "id": 7517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1881:2:40"
            },
            "returnParameters": {
              "id": 7522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7521,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7526,
                  "src": "1916:16:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7519,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1916:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7520,
                    "nodeType": "ArrayTypeName",
                    "src": "1916:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1915:18:40"
            },
            "scope": 7862,
            "src": "1848:128:40",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6698
            ],
            "body": {
              "id": 7541,
              "nodeType": "Block",
              "src": "2147:65:40",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 7536,
                        "name": "identities",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7511,
                        "src": "2164:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                          "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                        }
                      },
                      "id": 7538,
                      "indexExpression": {
                        "id": 7537,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7529,
                        "src": "2175:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2164:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Identity_$7505_storage",
                        "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                      }
                    },
                    "id": 7539,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "2189:16:40",
                    "memberName": "identityContract",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7502,
                    "src": "2164:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "functionReturnParameters": 7535,
                  "id": 7540,
                  "nodeType": "Return",
                  "src": "2157:48:40"
                }
              ]
            },
            "documentation": {
              "id": 7527,
              "nodeType": "StructuredDocumentation",
              "src": "1982:71:40",
              "text": "  @dev See {IIdentityRegistryStorage-storedIdentity}."
            },
            "functionSelector": "7988d3a5",
            "id": 7542,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "storedIdentity",
            "nameLocation": "2067:14:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7531,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2118:8:40"
            },
            "parameters": {
              "id": 7530,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7529,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "2090:12:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7542,
                  "src": "2082:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7528,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2082:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2081:22:40"
            },
            "returnParameters": {
              "id": 7535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7534,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7542,
                  "src": "2136:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 7533,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 7532,
                      "name": "IIdentity",
                      "nameLocations": [
                        "2136:9:40"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "2136:9:40"
                    },
                    "referencedDeclaration": 1743,
                    "src": "2136:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2135:11:40"
            },
            "scope": 7862,
            "src": "2058:154:40",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6706
            ],
            "body": {
              "id": 7556,
              "nodeType": "Block",
              "src": "2394:64:40",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 7551,
                        "name": "identities",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7511,
                        "src": "2411:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                          "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                        }
                      },
                      "id": 7553,
                      "indexExpression": {
                        "id": 7552,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7545,
                        "src": "2422:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2411:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Identity_$7505_storage",
                        "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                      }
                    },
                    "id": 7554,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "2436:15:40",
                    "memberName": "investorCountry",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7504,
                    "src": "2411:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 7550,
                  "id": 7555,
                  "nodeType": "Return",
                  "src": "2404:47:40"
                }
              ]
            },
            "documentation": {
              "id": 7543,
              "nodeType": "StructuredDocumentation",
              "src": "2218:78:40",
              "text": "  @dev See {IIdentityRegistryStorage-storedInvestorCountry}."
            },
            "functionSelector": "727e13bc",
            "id": 7557,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "storedInvestorCountry",
            "nameLocation": "2310:21:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7547,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2368:8:40"
            },
            "parameters": {
              "id": 7546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7545,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "2340:12:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7557,
                  "src": "2332:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2332:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2331:22:40"
            },
            "returnParameters": {
              "id": 7550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7549,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 7557,
                  "src": "2386:6:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 7548,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "2386:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2385:8:40"
            },
            "scope": 7862,
            "src": "2301:157:40",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6717
            ],
            "body": {
              "id": 7619,
              "nodeType": "Block",
              "src": "2694:419:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7574,
                              "name": "_identity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7563,
                              "src": "2720:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            ],
                            "id": 7573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2712:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7572,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2712:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2712:18:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7578,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2742:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2734:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7576,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2734:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2734:10:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2712:32:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "636f6e747261637420616464726573732063616e27742062652061207a65726f2061646472657373",
                        "id": 7581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2746:43:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_314ef5c8b61d6eefa1e6923e3945ebb4c3411155c8152476346dd6297d263859",
                          "typeString": "literal_string \"contract address can't be a zero address\""
                        },
                        "value": "contract address can't be a zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_314ef5c8b61d6eefa1e6923e3945ebb4c3411155c8152476346dd6297d263859",
                          "typeString": "literal_string \"contract address can't be a zero address\""
                        }
                      ],
                      "id": 7571,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2704:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2704:86:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7583,
                  "nodeType": "ExpressionStatement",
                  "src": "2704:86:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7587,
                                  "name": "identities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7511,
                                  "src": "2816:10:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                                    "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                                  }
                                },
                                "id": 7589,
                                "indexExpression": {
                                  "id": 7588,
                                  "name": "_userAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7560,
                                  "src": "2827:12:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2816:24:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Identity_$7505_storage",
                                  "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                                }
                              },
                              "id": 7590,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2841:16:40",
                              "memberName": "identityContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7502,
                              "src": "2816:41:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            ],
                            "id": 7586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2808:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7585,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2808:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2808:50:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7594,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2870:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2862:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7592,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2862:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2862:10:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2808:64:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6964656e7469747920636f6e747261637420616c7265616479206578697374732c20706c656173652075736520757064617465",
                        "id": 7597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2874:53:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d8cb1dfb20834a1f7a90296f90ee8620de7350a19c62237dc8b460442b8acdc8",
                          "typeString": "literal_string \"identity contract already exists, please use update\""
                        },
                        "value": "identity contract already exists, please use update"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d8cb1dfb20834a1f7a90296f90ee8620de7350a19c62237dc8b460442b8acdc8",
                          "typeString": "literal_string \"identity contract already exists, please use update\""
                        }
                      ],
                      "id": 7584,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2800:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2800:128:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7599,
                  "nodeType": "ExpressionStatement",
                  "src": "2800:128:40"
                },
                {
                  "expression": {
                    "id": 7605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7600,
                          "name": "identities",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7511,
                          "src": "2938:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                            "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                          }
                        },
                        "id": 7602,
                        "indexExpression": {
                          "id": 7601,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7560,
                          "src": "2949:12:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2938:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Identity_$7505_storage",
                          "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                        }
                      },
                      "id": 7603,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "2963:16:40",
                      "memberName": "identityContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7502,
                      "src": "2938:41:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7604,
                      "name": "_identity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7563,
                      "src": "2982:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      }
                    },
                    "src": "2938:53:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "id": 7606,
                  "nodeType": "ExpressionStatement",
                  "src": "2938:53:40"
                },
                {
                  "expression": {
                    "id": 7612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7607,
                          "name": "identities",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7511,
                          "src": "3001:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                            "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                          }
                        },
                        "id": 7609,
                        "indexExpression": {
                          "id": 7608,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7560,
                          "src": "3012:12:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3001:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Identity_$7505_storage",
                          "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                        }
                      },
                      "id": 7610,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "3026:15:40",
                      "memberName": "investorCountry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7504,
                      "src": "3001:40:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7611,
                      "name": "_country",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7565,
                      "src": "3044:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "3001:51:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 7613,
                  "nodeType": "ExpressionStatement",
                  "src": "3001:51:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7615,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7560,
                        "src": "3082:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7616,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7563,
                        "src": "3096:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      ],
                      "id": 7614,
                      "name": "IdentityStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6648,
                      "src": "3067:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IIdentity_$1743_$returns$__$",
                        "typeString": "function (address,contract IIdentity)"
                      }
                    },
                    "id": 7617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3067:39:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7618,
                  "nodeType": "EmitStatement",
                  "src": "3062:44:40"
                }
              ]
            },
            "documentation": {
              "id": 7558,
              "nodeType": "StructuredDocumentation",
              "src": "2464:77:40",
              "text": "  @dev See {IIdentityRegistryStorage-addIdentityToStorage}."
            },
            "functionSelector": "a53410dd",
            "id": 7620,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7569,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7568,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "2684:9:40"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9070,
                  "src": "2684:9:40"
                },
                "nodeType": "ModifierInvocation",
                "src": "2684:9:40"
              }
            ],
            "name": "addIdentityToStorage",
            "nameLocation": "2555:20:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7567,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2675:8:40"
            },
            "parameters": {
              "id": 7566,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7560,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "2593:12:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7620,
                  "src": "2585:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2585:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7563,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nameLocation": "2625:9:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7620,
                  "src": "2615:19:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 7562,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 7561,
                      "name": "IIdentity",
                      "nameLocations": [
                        "2615:9:40"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "2615:9:40"
                    },
                    "referencedDeclaration": 1743,
                    "src": "2615:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7565,
                  "mutability": "mutable",
                  "name": "_country",
                  "nameLocation": "2651:8:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7620,
                  "src": "2644:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 7564,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "2644:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2575:90:40"
            },
            "returnParameters": {
              "id": 7570,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2694:0:40"
            },
            "scope": 7862,
            "src": "2546:567:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6740
            ],
            "body": {
              "id": 7681,
              "nodeType": "Block",
              "src": "3302:419:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7635,
                                  "name": "identities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7511,
                                  "src": "3328:10:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                                    "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                                  }
                                },
                                "id": 7637,
                                "indexExpression": {
                                  "id": 7636,
                                  "name": "_userAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7623,
                                  "src": "3339:12:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3328:24:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Identity_$7505_storage",
                                  "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                                }
                              },
                              "id": 7638,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3353:16:40",
                              "memberName": "identityContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7502,
                              "src": "3328:41:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            ],
                            "id": 7634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3320:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7633,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3320:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3320:50:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3382:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7641,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3374:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7640,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3374:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3374:10:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3320:64:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "74686973207573657220686173206e6f206964656e746974792072656769737465726564",
                        "id": 7645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3386:38:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_359ffa89f021eeb161191650ba44a6dabc09d83a888c0d08ffda762c4706cee1",
                          "typeString": "literal_string \"this user has no identity registered\""
                        },
                        "value": "this user has no identity registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_359ffa89f021eeb161191650ba44a6dabc09d83a888c0d08ffda762c4706cee1",
                          "typeString": "literal_string \"this user has no identity registered\""
                        }
                      ],
                      "id": 7632,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3312:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3312:113:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7647,
                  "nodeType": "ExpressionStatement",
                  "src": "3312:113:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7651,
                              "name": "_identity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7626,
                              "src": "3451:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            ],
                            "id": 7650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3443:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7649,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3443:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3443:18:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7655,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3473:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3465:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7653,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3465:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7656,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3465:10:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3443:32:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "636f6e747261637420616464726573732063616e27742062652061207a65726f2061646472657373",
                        "id": 7658,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3477:43:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_314ef5c8b61d6eefa1e6923e3945ebb4c3411155c8152476346dd6297d263859",
                          "typeString": "literal_string \"contract address can't be a zero address\""
                        },
                        "value": "contract address can't be a zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_314ef5c8b61d6eefa1e6923e3945ebb4c3411155c8152476346dd6297d263859",
                          "typeString": "literal_string \"contract address can't be a zero address\""
                        }
                      ],
                      "id": 7648,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3435:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3435:86:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7660,
                  "nodeType": "ExpressionStatement",
                  "src": "3435:86:40"
                },
                {
                  "assignments": [
                    7663
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7663,
                      "mutability": "mutable",
                      "name": "oldIdentity",
                      "nameLocation": "3541:11:40",
                      "nodeType": "VariableDeclaration",
                      "scope": 7681,
                      "src": "3531:21:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      },
                      "typeName": {
                        "id": 7662,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 7661,
                          "name": "IIdentity",
                          "nameLocations": [
                            "3531:9:40"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 1743,
                          "src": "3531:9:40"
                        },
                        "referencedDeclaration": 1743,
                        "src": "3531:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7668,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 7664,
                        "name": "identities",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7511,
                        "src": "3555:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                          "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                        }
                      },
                      "id": 7666,
                      "indexExpression": {
                        "id": 7665,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7623,
                        "src": "3566:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3555:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Identity_$7505_storage",
                        "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                      }
                    },
                    "id": 7667,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "3580:16:40",
                    "memberName": "identityContract",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7502,
                    "src": "3555:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3531:65:40"
                },
                {
                  "expression": {
                    "id": 7674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7669,
                          "name": "identities",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7511,
                          "src": "3606:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                            "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                          }
                        },
                        "id": 7671,
                        "indexExpression": {
                          "id": 7670,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7623,
                          "src": "3617:12:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3606:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Identity_$7505_storage",
                          "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                        }
                      },
                      "id": 7672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "3631:16:40",
                      "memberName": "identityContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7502,
                      "src": "3606:41:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7673,
                      "name": "_identity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7626,
                      "src": "3650:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      }
                    },
                    "src": "3606:53:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "id": 7675,
                  "nodeType": "ExpressionStatement",
                  "src": "3606:53:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7677,
                        "name": "oldIdentity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7663,
                        "src": "3691:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      },
                      {
                        "id": 7678,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7626,
                        "src": "3704:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        },
                        {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      ],
                      "id": 7676,
                      "name": "IdentityModified",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6665,
                      "src": "3674:16:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IIdentity_$1743_$_t_contract$_IIdentity_$1743_$returns$__$",
                        "typeString": "function (contract IIdentity,contract IIdentity)"
                      }
                    },
                    "id": 7679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3674:40:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7680,
                  "nodeType": "EmitStatement",
                  "src": "3669:45:40"
                }
              ]
            },
            "documentation": {
              "id": 7621,
              "nodeType": "StructuredDocumentation",
              "src": "3119:77:40",
              "text": "  @dev See {IIdentityRegistryStorage-modifyStoredIdentity}."
            },
            "functionSelector": "e805cf86",
            "id": 7682,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7630,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7629,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "3292:9:40"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9070,
                  "src": "3292:9:40"
                },
                "nodeType": "ModifierInvocation",
                "src": "3292:9:40"
              }
            ],
            "name": "modifyStoredIdentity",
            "nameLocation": "3210:20:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7628,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3283:8:40"
            },
            "parameters": {
              "id": 7627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7623,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "3239:12:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7682,
                  "src": "3231:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3231:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7626,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nameLocation": "3263:9:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7682,
                  "src": "3253:19:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 7625,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 7624,
                      "name": "IIdentity",
                      "nameLocations": [
                        "3253:9:40"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "3253:9:40"
                    },
                    "referencedDeclaration": 1743,
                    "src": "3253:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3230:43:40"
            },
            "returnParameters": {
              "id": 7631,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3302:0:40"
            },
            "scope": 7862,
            "src": "3201:520:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6731
            ],
            "body": {
              "id": 7721,
              "nodeType": "Block",
              "src": "3920:245:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7696,
                                  "name": "identities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7511,
                                  "src": "3946:10:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                                    "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                                  }
                                },
                                "id": 7698,
                                "indexExpression": {
                                  "id": 7697,
                                  "name": "_userAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7685,
                                  "src": "3957:12:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3946:24:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Identity_$7505_storage",
                                  "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                                }
                              },
                              "id": 7699,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3971:16:40",
                              "memberName": "identityContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7502,
                              "src": "3946:41:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            ],
                            "id": 7695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3938:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7694,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3938:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3938:50:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4000:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3992:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7701,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3992:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3992:10:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3938:64:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "74686973207573657220686173206e6f206964656e746974792072656769737465726564",
                        "id": 7706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4004:38:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_359ffa89f021eeb161191650ba44a6dabc09d83a888c0d08ffda762c4706cee1",
                          "typeString": "literal_string \"this user has no identity registered\""
                        },
                        "value": "this user has no identity registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_359ffa89f021eeb161191650ba44a6dabc09d83a888c0d08ffda762c4706cee1",
                          "typeString": "literal_string \"this user has no identity registered\""
                        }
                      ],
                      "id": 7693,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3930:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3930:113:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7708,
                  "nodeType": "ExpressionStatement",
                  "src": "3930:113:40"
                },
                {
                  "expression": {
                    "id": 7714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7709,
                          "name": "identities",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7511,
                          "src": "4053:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                            "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                          }
                        },
                        "id": 7711,
                        "indexExpression": {
                          "id": 7710,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7685,
                          "src": "4064:12:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4053:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Identity_$7505_storage",
                          "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                        }
                      },
                      "id": 7712,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "4078:15:40",
                      "memberName": "investorCountry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7504,
                      "src": "4053:40:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 7713,
                      "name": "_country",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7687,
                      "src": "4096:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "4053:51:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 7715,
                  "nodeType": "ExpressionStatement",
                  "src": "4053:51:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7717,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7685,
                        "src": "4135:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7718,
                        "name": "_country",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7687,
                        "src": "4149:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 7716,
                      "name": "CountryModified",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6672,
                      "src": "4119:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (address,uint16)"
                      }
                    },
                    "id": 7719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4119:39:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7720,
                  "nodeType": "EmitStatement",
                  "src": "4114:44:40"
                }
              ]
            },
            "documentation": {
              "id": 7683,
              "nodeType": "StructuredDocumentation",
              "src": "3727:84:40",
              "text": "  @dev See {IIdentityRegistryStorage-modifyStoredInvestorCountry}."
            },
            "functionSelector": "9f3418d5",
            "id": 7722,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7691,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7690,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "3910:9:40"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9070,
                  "src": "3910:9:40"
                },
                "nodeType": "ModifierInvocation",
                "src": "3910:9:40"
              }
            ],
            "name": "modifyStoredInvestorCountry",
            "nameLocation": "3825:27:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7689,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3901:8:40"
            },
            "parameters": {
              "id": 7688,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7685,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "3861:12:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7722,
                  "src": "3853:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7684,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3853:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7687,
                  "mutability": "mutable",
                  "name": "_country",
                  "nameLocation": "3882:8:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7722,
                  "src": "3875:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 7686,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3875:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3852:39:40"
            },
            "returnParameters": {
              "id": 7692,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3920:0:40"
            },
            "scope": 7862,
            "src": "3816:349:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6723
            ],
            "body": {
              "id": 7760,
              "nodeType": "Block",
              "src": "4343:262:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7734,
                                  "name": "identities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7511,
                                  "src": "4369:10:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                                    "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                                  }
                                },
                                "id": 7736,
                                "indexExpression": {
                                  "id": 7735,
                                  "name": "_userAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7725,
                                  "src": "4380:12:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4369:24:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Identity_$7505_storage",
                                  "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                                }
                              },
                              "id": 7737,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4394:16:40",
                              "memberName": "identityContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7502,
                              "src": "4369:41:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            ],
                            "id": 7733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4361:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7732,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4361:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4361:50:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4423:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4415:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7739,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4415:7:40",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4415:10:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4361:64:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "796f7520686176656e2774207265676973746572656420616e206964656e7469747920796574",
                        "id": 7744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4427:41:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f124208c59f68758303fe323a6df8b006faf26fcb5d56dd543fdafcbf0ac511",
                          "typeString": "literal_string \"you haven't registered an identity yet\""
                        },
                        "value": "you haven't registered an identity yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f124208c59f68758303fe323a6df8b006faf26fcb5d56dd543fdafcbf0ac511",
                          "typeString": "literal_string \"you haven't registered an identity yet\""
                        }
                      ],
                      "id": 7731,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4353:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4353:116:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7746,
                  "nodeType": "ExpressionStatement",
                  "src": "4353:116:40"
                },
                {
                  "expression": {
                    "id": 7750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "4479:31:40",
                    "subExpression": {
                      "baseExpression": {
                        "id": 7747,
                        "name": "identities",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7511,
                        "src": "4486:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                          "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                        }
                      },
                      "id": 7749,
                      "indexExpression": {
                        "id": 7748,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7725,
                        "src": "4497:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4486:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Identity_$7505_storage",
                        "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7751,
                  "nodeType": "ExpressionStatement",
                  "src": "4479:31:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7753,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7725,
                        "src": "4542:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 7754,
                            "name": "identities",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7511,
                            "src": "4556:10:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Identity_$7505_storage_$",
                              "typeString": "mapping(address => struct IdentityRegistryStorage.Identity storage ref)"
                            }
                          },
                          "id": 7756,
                          "indexExpression": {
                            "id": 7755,
                            "name": "_userAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7725,
                            "src": "4567:12:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4556:24:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Identity_$7505_storage",
                            "typeString": "struct IdentityRegistryStorage.Identity storage ref"
                          }
                        },
                        "id": 7757,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4581:16:40",
                        "memberName": "identityContract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7502,
                        "src": "4556:41:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      ],
                      "id": 7752,
                      "name": "IdentityUnstored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6656,
                      "src": "4525:16:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IIdentity_$1743_$returns$__$",
                        "typeString": "function (address,contract IIdentity)"
                      }
                    },
                    "id": 7758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4525:73:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7759,
                  "nodeType": "EmitStatement",
                  "src": "4520:78:40"
                }
              ]
            },
            "documentation": {
              "id": 7723,
              "nodeType": "StructuredDocumentation",
              "src": "4171:82:40",
              "text": "  @dev See {IIdentityRegistryStorage-removeIdentityFromStorage}."
            },
            "functionSelector": "cf191bcd",
            "id": 7761,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7729,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7728,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "4333:9:40"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9070,
                  "src": "4333:9:40"
                },
                "nodeType": "ModifierInvocation",
                "src": "4333:9:40"
              }
            ],
            "name": "removeIdentityFromStorage",
            "nameLocation": "4267:25:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7727,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4324:8:40"
            },
            "parameters": {
              "id": 7726,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7725,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "4301:12:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7761,
                  "src": "4293:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7724,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4293:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4292:22:40"
            },
            "returnParameters": {
              "id": 7730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4343:0:40"
            },
            "scope": 7862,
            "src": "4258:347:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6746
            ],
            "body": {
              "id": 7774,
              "nodeType": "Block",
              "src": "4814:45:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7771,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7764,
                        "src": "4842:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7770,
                      "name": "transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2484,
                      "src": "4824:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4824:28:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7773,
                  "nodeType": "ExpressionStatement",
                  "src": "4824:28:40"
                }
              ]
            },
            "documentation": {
              "id": 7762,
              "nodeType": "StructuredDocumentation",
              "src": "4611:99:40",
              "text": "  @dev See {IIdentityRegistryStorage-transferOwnershipOnIdentityRegistryStorage}."
            },
            "functionSelector": "5ccbbe49",
            "id": 7775,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7768,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 7767,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "4804:9:40"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "4804:9:40"
                },
                "nodeType": "ModifierInvocation",
                "src": "4804:9:40"
              }
            ],
            "name": "transferOwnershipOnIdentityRegistryStorage",
            "nameLocation": "4724:42:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7766,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4795:8:40"
            },
            "parameters": {
              "id": 7765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7764,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nameLocation": "4775:9:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7775,
                  "src": "4767:17:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7763,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4767:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4766:19:40"
            },
            "returnParameters": {
              "id": 7769,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4814:0:40"
            },
            "scope": 7862,
            "src": "4715:144:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6752
            ],
            "body": {
              "id": 7796,
              "nodeType": "Block",
              "src": "5022:151:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7783,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7778,
                        "src": "5041:17:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7782,
                      "name": "addAgent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9101,
                      "src": "5032:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5032:27:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7785,
                  "nodeType": "ExpressionStatement",
                  "src": "5032:27:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7789,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7778,
                        "src": "5093:17:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 7786,
                        "name": "identityRegistries",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7515,
                        "src": "5069:18:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 7788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5088:4:40",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "5069:23:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
                        "typeString": "function (address[] storage pointer,address)"
                      }
                    },
                    "id": 7790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5069:42:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7791,
                  "nodeType": "ExpressionStatement",
                  "src": "5069:42:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7793,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7778,
                        "src": "5148:17:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7792,
                      "name": "IdentityRegistryBound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6677,
                      "src": "5126:21:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5126:40:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7795,
                  "nodeType": "EmitStatement",
                  "src": "5121:45:40"
                }
              ]
            },
            "documentation": {
              "id": 7776,
              "nodeType": "StructuredDocumentation",
              "src": "4865:77:40",
              "text": "  @dev See {IIdentityRegistryStorage-bindIdentityRegistry}."
            },
            "functionSelector": "690a49f9",
            "id": 7797,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bindIdentityRegistry",
            "nameLocation": "4956:20:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7780,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5013:8:40"
            },
            "parameters": {
              "id": 7779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7778,
                  "mutability": "mutable",
                  "name": "_identityRegistry",
                  "nameLocation": "4985:17:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7797,
                  "src": "4977:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7777,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4977:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4976:27:40"
            },
            "returnParameters": {
              "id": 7781,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5022:0:40"
            },
            "scope": 7862,
            "src": "4947:226:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              6758
            ],
            "body": {
              "id": 7860,
              "nodeType": "Block",
              "src": "5340:509:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 7805,
                            "name": "identityRegistries",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7515,
                            "src": "5358:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage",
                              "typeString": "address[] storage ref"
                            }
                          },
                          "id": 7806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5377:6:40",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5358:25:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5386:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5358:29:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6964656e74697479207265676973747279206973206e6f742073746f726564",
                        "id": 7809,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5389:33:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b93320b45eec031c532d533bc5a30d598b97d9cdd9618c549c011e4c074c85cc",
                          "typeString": "literal_string \"identity registry is not stored\""
                        },
                        "value": "identity registry is not stored"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b93320b45eec031c532d533bc5a30d598b97d9cdd9618c549c011e4c074c85cc",
                          "typeString": "literal_string \"identity registry is not stored\""
                        }
                      ],
                      "id": 7804,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5350:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5350:73:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7811,
                  "nodeType": "ExpressionStatement",
                  "src": "5350:73:40"
                },
                {
                  "assignments": [
                    7813
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7813,
                      "mutability": "mutable",
                      "name": "length",
                      "nameLocation": "5441:6:40",
                      "nodeType": "VariableDeclaration",
                      "scope": 7860,
                      "src": "5433:14:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7812,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5433:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7816,
                  "initialValue": {
                    "expression": {
                      "id": 7814,
                      "name": "identityRegistries",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7515,
                      "src": "5450:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 7815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "5469:6:40",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "5450:25:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5433:42:40"
                },
                {
                  "body": {
                    "id": 7850,
                    "nodeType": "Block",
                    "src": "5522:224:40",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 7827,
                              "name": "identityRegistries",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7515,
                              "src": "5540:18:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 7829,
                            "indexExpression": {
                              "id": 7828,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7818,
                              "src": "5559:1:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5540:21:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 7830,
                            "name": "_identityRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7800,
                            "src": "5565:17:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5540:42:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7849,
                        "nodeType": "IfStatement",
                        "src": "5536:200:40",
                        "trueBody": {
                          "id": 7848,
                          "nodeType": "Block",
                          "src": "5584:152:40",
                          "statements": [
                            {
                              "expression": {
                                "id": 7840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 7832,
                                    "name": "identityRegistries",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7515,
                                    "src": "5602:18:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 7834,
                                  "indexExpression": {
                                    "id": 7833,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7818,
                                    "src": "5621:1:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "5602:21:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 7835,
                                    "name": "identityRegistries",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7515,
                                    "src": "5626:18:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 7839,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7838,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 7836,
                                      "name": "length",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7813,
                                      "src": "5645:6:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 7837,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5654:1:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "5645:10:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5626:30:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "5602:54:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 7841,
                              "nodeType": "ExpressionStatement",
                              "src": "5602:54:40"
                            },
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 7842,
                                    "name": "identityRegistries",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7515,
                                    "src": "5674:18:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 7844,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "5693:3:40",
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "src": "5674:22:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
                                    "typeString": "function (address[] storage pointer)"
                                  }
                                },
                                "id": 7845,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5674:24:40",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7846,
                              "nodeType": "ExpressionStatement",
                              "src": "5674:24:40"
                            },
                            {
                              "id": 7847,
                              "nodeType": "Break",
                              "src": "5716:5:40"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7821,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7818,
                      "src": "5505:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 7822,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7813,
                      "src": "5509:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5505:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7851,
                  "initializationExpression": {
                    "assignments": [
                      7818
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7818,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5498:1:40",
                        "nodeType": "VariableDeclaration",
                        "scope": 7851,
                        "src": "5490:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7817,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5490:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 7820,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 7819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5502:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5490:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 7825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5517:3:40",
                      "subExpression": {
                        "id": 7824,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7818,
                        "src": "5517:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7826,
                    "nodeType": "ExpressionStatement",
                    "src": "5517:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "5485:261:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7853,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7800,
                        "src": "5767:17:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7852,
                      "name": "removeAgent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9119,
                      "src": "5755:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5755:30:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7855,
                  "nodeType": "ExpressionStatement",
                  "src": "5755:30:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7857,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7800,
                        "src": "5824:17:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7856,
                      "name": "IdentityRegistryUnbound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6682,
                      "src": "5800:23:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5800:42:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7859,
                  "nodeType": "EmitStatement",
                  "src": "5795:47:40"
                }
              ]
            },
            "documentation": {
              "id": 7798,
              "nodeType": "StructuredDocumentation",
              "src": "5179:79:40",
              "text": "  @dev See {IIdentityRegistryStorage-unbindIdentityRegistry}."
            },
            "functionSelector": "97a012f7",
            "id": 7861,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unbindIdentityRegistry",
            "nameLocation": "5272:22:40",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7802,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5331:8:40"
            },
            "parameters": {
              "id": 7801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7800,
                  "mutability": "mutable",
                  "name": "_identityRegistry",
                  "nameLocation": "5303:17:40",
                  "nodeType": "VariableDeclaration",
                  "scope": 7861,
                  "src": "5295:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5295:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5294:27:40"
            },
            "returnParameters": {
              "id": 7803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5340:0:40"
            },
            "scope": 7862,
            "src": "5263:586:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7863,
        "src": "1269:4582:40",
        "usedErrors": []
      }
    ],
    "src": "1093:4759:40"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.379Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "addIdentityToStorage(address,address,uint16)": {
        "details": "See {IIdentityRegistryStorage-addIdentityToStorage}."
      },
      "bindIdentityRegistry(address)": {
        "details": "See {IIdentityRegistryStorage-bindIdentityRegistry}."
      },
      "linkedIdentityRegistries()": {
        "details": "See {IIdentityRegistryStorage-linkedIdentityRegistries}."
      },
      "modifyStoredIdentity(address,address)": {
        "details": "See {IIdentityRegistryStorage-modifyStoredIdentity}."
      },
      "modifyStoredInvestorCountry(address,uint16)": {
        "details": "See {IIdentityRegistryStorage-modifyStoredInvestorCountry}."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "removeIdentityFromStorage(address)": {
        "details": "See {IIdentityRegistryStorage-removeIdentityFromStorage}."
      },
      "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."
      },
      "storedIdentity(address)": {
        "details": "See {IIdentityRegistryStorage-storedIdentity}."
      },
      "storedInvestorCountry(address)": {
        "details": "See {IIdentityRegistryStorage-storedInvestorCountry}."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "transferOwnershipOnIdentityRegistryStorage(address)": {
        "details": "See {IIdentityRegistryStorage-transferOwnershipOnIdentityRegistryStorage}."
      },
      "unbindIdentityRegistry(address)": {
        "details": "See {IIdentityRegistryStorage-unbindIdentityRegistry}."
      }
    },
    "stateVariables": {
      "identities": {
        "details": "mapping between a user address and the corresponding identity"
      },
      "identityRegistries": {
        "details": "array of Identity Registries linked to this storage"
      }
    },
    "version": 1
  },
  "userdoc": {
    "events": {
      "CountryModified(address,uint16)": {
        "notice": "this event is emitted when an Identity's country has been updated  the event is emitted by the 'updateCountry' function  `investorAddress` is the address on which the country has been updated  `country` is the numeric code (ISO 3166-1) of the new country"
      },
      "IdentityModified(address,address)": {
        "notice": "this event is emitted when an Identity has been updated  the event is emitted by the 'updateIdentity' function  `oldIdentity` is the old Identity contract's address to update  `newIdentity` is the new Identity contract's"
      },
      "IdentityRegistryBound(address)": {
        "notice": "this event is emitted when an Identity Registry is bound to the storage contract  the event is emitted by the 'addIdentityRegistry' function  `identityRegistry` is the address of the identity registry added"
      },
      "IdentityRegistryUnbound(address)": {
        "notice": "this event is emitted when an Identity Registry is unbound from the storage contract  the event is emitted by the 'removeIdentityRegistry' function  `identityRegistry` is the address of the identity registry removed"
      },
      "IdentityStored(address,address)": {
        "notice": "this event is emitted when an Identity is registered into the storage contract.  the event is emitted by the 'registerIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)"
      },
      "IdentityUnstored(address,address)": {
        "notice": "this event is emitted when an Identity is removed from the storage contract.  the event is emitted by the 'deleteIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)"
      }
    },
    "kind": "user",
    "methods": {},
    "version": 1
  }
}