{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bridgeRouter",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_fundsRecipient",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ProcessFailure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Recovery",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "affectedAssets",
      "outputs": [
        {
          "internalType": "address payable[14]",
          "name": "",
          "type": "address[14]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_who",
          "type": "address[]"
        }
      ],
      "name": "allow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowList",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        }
      ],
      "name": "assetInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalAffected",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalMinted",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalCollected",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalRecovered",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeRouter",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_handler",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "collect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_who",
          "type": "address[]"
        }
      ],
      "name": "disallow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        }
      ],
      "name": "info",
      "outputs": [
        {
          "internalType": "address",
          "name": "_holder",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isAllowed",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "_uri",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_originalAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_originalUser",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_recovered",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_recoverable",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        }
      ],
      "name": "isAffectedAsset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nextID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "record",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "records",
      "outputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "originalUser",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "recovered",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        }
      ],
      "name": "recover",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        }
      ],
      "name": "recoverable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "remove",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalAffected",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalCollected",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalMinted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalRecovered",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60c060405234801561001057600080fd5b506040516200479c3803806200479c8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147116200008b600039806112f25280611d72525080611091528061131652506147116000f3fe608060405234801561001057600080fd5b50600436106102d15760003560e01c80636c0360eb11610186578063a22cb465116100e3578063c8fea2fb11610097578063e985e9c511610071578063e985e9c514610b7d578063f2fde38b14610bb8578063f3f0531314610beb576102d1565b8063c8fea2fb14610a97578063ca091ef314610ada578063e271f8e314610b4a576102d1565b8063b88d4fde116100c8578063b88d4fde14610974578063bf799f2b14610a47578063c87b56dd14610a7a576102d1565b8063a22cb46514610900578063abe7f1ab1461093b576102d1565b80638129fc1c1161013a5780638da5cb5b1161011f5780638da5cb5b1461088057806395d89b4114610888578063987c5ced14610890576102d1565b80638129fc1c1461081f5780638b0dcb4e14610827576102d1565b80637013ca261161016b5780637013ca26146107a357806370a08231146107e4578063715018a614610817576102d1565b80636c0360eb146107685780636c26763314610770576102d1565b806323b872dd116102345780633b6fd2cf116101e857806342842e0e116101cd57806342842e0e146104f95780634f6ccce71461072e5780636352211e1461074b576102d1565b80633b6fd2cf1461071e57806341af5b5214610726576102d1565b80632e340599116102195780632e3405991461056f5780632f745c591461067957806334461067146106b2576102d1565b806323b872dd146104f95780632848aeaf1461053c576102d1565b8063095ea7b31161028b578063172a93fb11610270578063172a93fb146104a657806318160ddd146104e95780631e96917d146104f1576102d1565b8063095ea7b31461044e5780630ca3568214610489576102d1565b806301ffc9a7116102bc57806301ffc9a71461033857806306fdde031461038b578063081812fc14610408576102d1565b80623d4790146102d6578062c12c311461031b575b600080fd5b610309600480360360208110156102ec57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c1e565b60408051918252519081900360200190f35b6103096004803603602081101561033157600080fd5b5035610c30565b6103776004803603602081101561034e57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610d37565b604080519115158252519081900360200190f35b610393610d6e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103cd5781810151838201526020016103b5565b50505050905090810190601f1680156103fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104256004803603602081101561041e57600080fd5b5035610e22565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6104876004803603604081101561046457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eab565b005b6104876004803603602081101561049f57600080fd5b5035610fee565b610487600480360360608110156104bc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611079565b610309611128565b610309611139565b6104876004803603606081101561050f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561113f565b6103776004803603602081101561055257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611147565b61058c6004803603602081101561058557600080fd5b503561115d565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018815158152602001806020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b8381101561063757818101518382015260200161061f565b50505050905090810190601f1680156106645780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b6103096004803603604081101561068f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611253565b6106cf600480360360208110156106c857600080fd5b503561128b565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681526bffffffffffffffffffffffff94851660208201529290941682850152909116606082015290519081900360800190f35b6104256112f0565b610425611314565b6103096004803603602081101561074457600080fd5b5035611338565b6104256004803603602081101561076157600080fd5b503561134e565b610393611376565b6103776004803603602081101561078657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6107ab61141f565b60405180826101c080838360005b838110156107d15781810151838201526020016107b9565b5050505090500191505060405180910390f35b610309600480360360208110156107fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115a7565b610487611643565b61048761175a565b61085a6004803603602081101561083d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661192f565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610425611978565b610393611994565b610487600480360360208110156108a657600080fd5b8101906020810181356401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460208302840111640100000000831117156108f557600080fd5b509092509050611a13565b6104876004803603604081101561091657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611b3d565b6104876004803603604081101561095157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cae565b6104876004803603608081101561098a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156109d257600080fd5b8201836020820111156109e457600080fd5b80359060200191846001830284011164010000000083111715610a0657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ebd945050505050565b61030960048036036020811015610a5d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ecb565b61039360048036036020811015610a9057600080fd5b5035611ede565b61048760048036036060811015610aad57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561224b565b61048760048036036020811015610af057600080fd5b810190602081018135640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846020830284011164010000000083111715610b3f57600080fd5b509092509050612346565b61030960048036036020811015610b6057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612470565b61037760048036036040811015610b9357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612482565b61048760048036036020811015610bce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166124bd565b61030960048036036020811015610c0157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661265f565b60fd6020526000908152604090205481565b6000610c3b82612672565b610ca657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e0000604482015290519081900360640190fd5b600082815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff740100000000000000000000000000000000000000009283900481169584019590955260019093015492831694820194909452929004166060820152610d2e8161267f565b9150505b919050565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526065602052604090205460ff1690565b609c8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e185780601f10610ded57610100808354040283529160200191610e18565b820191906000526020600020905b815481529060010190602001808311610dfb57829003601f168201915b5050505050905090565b6000610e2d82612672565b610e82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061465f602c913960400191505060405180910390fd5b506000908152609a602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610eb68261134e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146ba6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f5c61271c565b73ffffffffffffffffffffffffffffffffffffffff161480610f8a5750610f8a81610f8561271c565b612482565b610fdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806145846038913960400191505060405180910390fd5b610fe98383612720565b505050565b33600090815261015f602052604090205460ff1661106d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015290519081900360640190fd5b611076816127c0565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461111d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f6e6c7920427269646765526f75746572000000000000000000000000000000604482015290519081900360640190fd5b610fe9838383612a1d565b60006111346098612bb9565b905090565b60fb5481565b610fe9612bc4565b61015f6020526000908152604090205460ff1681565b600080606060008060008060006111738961134e565b73ffffffffffffffffffffffffffffffffffffffff8116600090815261015f602052604090205490985060ff1696506111ab89611ede565b60008a815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff8082168084526bffffffffffffffffffffffff7401000000000000000000000000000000000000000093849004811696850187905260019095015491821696840187905291900490921660608201819052949a509098509096509094509092506112458a610c30565b915050919395975091939597565b73ffffffffffffffffffffffffffffffffffffffff821660009081526097602052604081206112829083612c2b565b90505b92915050565b60fc602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff808316926bffffffffffffffffffffffff740100000000000000000000000000000000000000009182900481169392831692919091041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611346609884612c37565b509392505050565b6000611285826040518060600160405280602981526020016145e66029913960989190612c53565b609f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e185780601f10610ded57610100808354040283529160200191610e18565b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902054151590565b611427614423565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b600073ffffffffffffffffffffffffffffffffffffffff8216611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145bc602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260976020526040902061128590612bb9565b61164b61271c565b73ffffffffffffffffffffffffffffffffffffffff16611669611978565b73ffffffffffffffffffffffffffffffffffffffff16146116eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c95460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360c980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b603254610100900460ff16806117735750611773612c6a565b80611781575060325460ff16155b6117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff1615801561183c57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611844612c7b565b6118b86040518060400160405280600981526020017f4e6f6d6164204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6e6f4e4654000000000000000000000000000000000000000000000000000000815250612f0c565b6118f66040518060400160405280601681526020017f68747470733a2f2f6e66742e6e6f6d61642e78797a2f0000000000000000000081525061303b565b6118fe61304e565b801561107657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b73ffffffffffffffffffffffffffffffffffffffff166000908152602081815260408083205460fd83528184205461012d84528285205461012e90945291909320549293909290565b60c95473ffffffffffffffffffffffffffffffffffffffff1690565b609d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e185780601f10610ded57610100808354040283529160200191610e18565b611a1b61271c565b73ffffffffffffffffffffffffffffffffffffffff16611a39611978565b73ffffffffffffffffffffffffffffffffffffffff1614611abb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81811015610fe957600161015f6000858585818110611ad957fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611abe565b611b4561271c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80609b6000611bec61271c565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155611c5b61271c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b611cb661271c565b73ffffffffffffffffffffffffffffffffffffffff16611cd4611978565b73ffffffffffffffffffffffffffffffffffffffff1614611d5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611d9773ffffffffffffffffffffffffffffffffffffffff83167f000000000000000000000000000000000000000000000000000000000000000083613140565b73ffffffffffffffffffffffffffffffffffffffff8216600081815261012e602090815260408083205461012d8352928190205481517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915193900393926370a0823192602480840193919291829003018186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b50511015611eb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f766520616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b611ec5612bc4565b50505050565b61012e6020526000908152604090205481565b6060611ee982612672565b611f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061468b602f913960400191505060405180910390fd5b6000828152609e602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015611fef5780601f10611fc457610100808354040283529160200191611fef565b820191906000526020600020905b815481529060010190602001808311611fd257829003601f168201915b505050505090506000612000611376565b905080516000141561201457509050610d32565b81511561212f5780826040516020018083805190602001908083835b6020831061206d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612030565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b602083106120f157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120b4565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610d32565b80612139856131cd565b6040516020018083805190602001908083835b6020831061218957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161214c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061220d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016121d0565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b61225361271c565b73ffffffffffffffffffffffffffffffffffffffff16612271611978565b73ffffffffffffffffffffffffffffffffffffffff16146122f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61231573ffffffffffffffffffffffffffffffffffffffff83168430846132fa565b73ffffffffffffffffffffffffffffffffffffffff909116600090815261012d602052604090208054909101905550565b61234e61271c565b73ffffffffffffffffffffffffffffffffffffffff1661236c611978565b73ffffffffffffffffffffffffffffffffffffffff16146123ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81811015610fe957600061015f600085858581811061240c57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016123f1565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152609b6020908152604080832093909416825291909152205460ff1690565b6124c561271c565b73ffffffffffffffffffffffffffffffffffffffff166124e3611978565b73ffffffffffffffffffffffffffffffffffffffff161461256557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145386026913960400191505060405180910390fd5b60c95460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61012d6020526000908152604090205481565b600061128560988361338f565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526020818152604080832054828601518651909516845261012d909252822054919283926bffffffffffffffffffffffff90911602816126d957fe5b04905082606001516bffffffffffffffffffffffff16811015612700576000915050610d32565b60608301516bffffffffffffffffffffffff1690039050919050565b3390565b6000818152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061277a8261134e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006127cb8261134e565b905073ffffffffffffffffffffffffffffffffffffffff8116331461285157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f6e6c79204e465420686f6c6465722063616e207265636f7665720000000000604482015290519081900360640190fd5b600082815260fc602090815260408083208151608081018352815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff7401000000000000000000000000000000000000000092839004811696840196909652600190930154928316938201939093529190049091166060820152906128db8261267f565b90508061294957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63757272656e746c792066756c6c79207265636f766572656400000000000000604482015290519081900360640190fd5b815173ffffffffffffffffffffffffffffffffffffffff808216600081815261012e6020908152604080832080548801905589835260fc82529182902060010180546bffffffffffffffffffffffff7401000000000000000000000000000000000000000080830482168a0190911602908616179055815186815291519388169389927f17d2c50d23ce305bb9110cc7ebdad11256efdcde5771581f8a57202e4eafaff692908290030190a4612a1673ffffffffffffffffffffffffffffffffffffffff82168584613140565b5050505050565b60fb805460018101909155612a32838261339b565b600081815260fc6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8a81169182178116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8b160217845560019093018054909216928916929092179055835260fd80835281842080548701908190558484529190932054929091521115612b4d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80856040518082815260200191505060405180910390a450505050565b6000611285826133b5565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e73666572730000000000000000000000000000000000000000604482015290519081900360640190fd5b600061128283836133b9565b6000808080612c468686613437565b9097909650945050505050565b6000612c608484846134cc565b90505b9392505050565b6000612c75306135b0565b15905090565b600060208190526417f117200f7ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec8556904d7b58372297b8deaf97f2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a455654f5aa599f7c07fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d556a05873e2ff48e466ba2a59d7f27e997bcf7e34b5892c35718d72ca8a4d44f6f77265e19fe4feb6a8ebb16cc7b556507d8748182137fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac63042556a03c00b5742b19f454142857f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541556a5dce3546a3de30fc55c6007f9cdb9ef8486d08aeebffa8fc9bbb85a20624c3ec8359d0fa1781366bd9aea8ad55699bf5a4d57a26c3c9d3b07f55813e084f33673b4b20bdc0331a65033a42722331e3f55a70ef815e1ddd4fb4556b01ab04465765b7c37a9b10007f65d12645f02a494bda192fbb7d0176b7df838fe8410c311663defbb56bfe7c28556a05f94e3dd1d341a8a949207fd50ff4d0ac27265152d143aec668d4c99a8fc77655d8a62125d1a4d3cd59087b55691692887ced913385b7807f541919c86040022d9e18ea6a255cd26949db2e27ffdd387787ea434611d53f44556a30a52129bcbbb1a75b6ac07f5f5fc63651242af2cb273d90cb6dd24751f30b6c885d12f328d3de3f13cba808556a09c3302fbb8195460740007f6fc1d9f3e3a05044d624fd126acdcb494d565eda599ac28936ba2e25ca06a62c5573f1dc500fde233a4055e25e5bbf516372bc4f6871905269444f9a32d89d50eec9647f9754ecc4659a29acf96c52a3094f54ed36634a7cb944ee6f2311c46b1437563355565b603254610100900460ff1680612f255750612f25612c6a565b80612f33575060325460ff16155b612f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff16158015612fee57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612ff66135b6565b612ffe6136c8565b61300883836137d3565b8015610fe957603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b8051611eb990609f906020840190614442565b603254610100900460ff16806130675750613067612c6a565b80613075575060325460ff16155b6130ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff1615801561313057603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6131386135b6565b6118fe613958565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610fe9908490613ae8565b60608161320e575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d32565b8160005b811561322657600101600a82049150613212565b60008167ffffffffffffffff8111801561323f57600080fd5b506040519080825280601f01601f19166020018201604052801561326a576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b83156132f157600a840660300160f81b828280600190039350815181106132b757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613294565b50949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611ec5908590613ae8565b60006112828383613bc0565b611eb9828260405180602001604052806000815250613bd8565b5490565b81546000908210613415576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806144e46022913960400191505060405180910390fd5b82600001828154811061342457fe5b9060005260206000200154905092915050565b815460009081908310613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061463d6022913960400191505060405180910390fd5b60008460000184815481106134a657fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281613581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561354657818101518382015260200161352e565b50505050905090810190601f1680156135735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061359457fe5b9060005260206000209060020201600101549150509392505050565b3b151590565b603254610100900460ff16806135cf57506135cf612c6a565b806135dd575060325460ff16155b613632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff161580156118fe57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561107657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b603254610100900460ff16806136e157506136e1612c6a565b806136ef575060325460ff16155b613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff161580156137aa57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6118fe7f01ffc9a700000000000000000000000000000000000000000000000000000000613c44565b603254610100900460ff16806137ec57506137ec612c6a565b806137fa575060325460ff16155b61384f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff161580156138b557603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b82516138c890609c906020860190614442565b5081516138dc90609d906020850190614442565b506139067f80ac58cd00000000000000000000000000000000000000000000000000000000613c44565b61392f7f5b5e139f00000000000000000000000000000000000000000000000000000000613c44565b6130087f780e9d6300000000000000000000000000000000000000000000000000000000613c44565b603254610100900460ff16806139715750613971612c6a565b8061397f575060325460ff16155b6139d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff16158015613a3a57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000613a4461271c565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561107657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6000613b4a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613d309092919063ffffffff16565b805190915015610fe957808060200190516020811015613b6957600080fd5b5051610fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806146db602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b613be28383613d3f565b613bef6000848484613ec8565b610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806145066032913960400191505060405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008082161415613cd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016600090815260656020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6060612c6084846000856140d9565b73ffffffffffffffffffffffffffffffffffffffff8216613dc157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613dca81612672565b15613e3657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613e4260008383610fe9565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020613e719082614293565b50613e7e6098828461429f565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000613ee98473ffffffffffffffffffffffffffffffffffffffff166135b0565b613ef5575060016140d1565b600061406d7f150b7a0200000000000000000000000000000000000000000000000000000000613f2361271c565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613fa4578181015183820152602001613f8c565b50505050905090810190601f168015613fd15780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603281526020016145066032913973ffffffffffffffffffffffffffffffffffffffff88169190613d30565b9050600081806020019051602081101561408657600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014925050505b949350505050565b606082471015614134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061455e6026913960400191505060405180910390fd5b61413d856135b0565b6141a857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061421157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016141d4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614273576040519150601f19603f3d011682016040523d82523d6000602084013e614278565b606091505b50915091506142888282866142c2565b979650505050505050565b60006112828383614342565b6000612c60848473ffffffffffffffffffffffffffffffffffffffff851661438c565b606083156142d1575081612c63565b8251156142e15782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561354657818101518382015260200161352e565b600061434e8383613bc0565b61438457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611285565b506000611285565b6000828152600184016020526040812054806143f1575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612c63565b8285600001600183038154811061440457fe5b9060005260206000209060020201600101819055506000915050612c63565b604051806101c00160405280600e906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261447857600085556144be565b82601f1061449157805160ff19168380011785556144be565b828001600101855582156144be579182015b828111156144be5782518255916020019190600101906144a3565b506144ca9291506144ce565b5090565b5b808211156144ca57600081556001016144cf56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a",
    "sourceMap": "9014:2757:40:-:0;;;9288:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9288:128:40;;;;;;;-1:-1:-1;;;;;;857:28:39;;;;;;;;5215:32:40;;;::::1;::::0;9014:2757;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106102d15760003560e01c80636c0360eb11610186578063a22cb465116100e3578063c8fea2fb11610097578063e985e9c511610071578063e985e9c514610b7d578063f2fde38b14610bb8578063f3f0531314610beb576102d1565b8063c8fea2fb14610a97578063ca091ef314610ada578063e271f8e314610b4a576102d1565b8063b88d4fde116100c8578063b88d4fde14610974578063bf799f2b14610a47578063c87b56dd14610a7a576102d1565b8063a22cb46514610900578063abe7f1ab1461093b576102d1565b80638129fc1c1161013a5780638da5cb5b1161011f5780638da5cb5b1461088057806395d89b4114610888578063987c5ced14610890576102d1565b80638129fc1c1461081f5780638b0dcb4e14610827576102d1565b80637013ca261161016b5780637013ca26146107a357806370a08231146107e4578063715018a614610817576102d1565b80636c0360eb146107685780636c26763314610770576102d1565b806323b872dd116102345780633b6fd2cf116101e857806342842e0e116101cd57806342842e0e146104f95780634f6ccce71461072e5780636352211e1461074b576102d1565b80633b6fd2cf1461071e57806341af5b5214610726576102d1565b80632e340599116102195780632e3405991461056f5780632f745c591461067957806334461067146106b2576102d1565b806323b872dd146104f95780632848aeaf1461053c576102d1565b8063095ea7b31161028b578063172a93fb11610270578063172a93fb146104a657806318160ddd146104e95780631e96917d146104f1576102d1565b8063095ea7b31461044e5780630ca3568214610489576102d1565b806301ffc9a7116102bc57806301ffc9a71461033857806306fdde031461038b578063081812fc14610408576102d1565b80623d4790146102d6578062c12c311461031b575b600080fd5b610309600480360360208110156102ec57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c1e565b60408051918252519081900360200190f35b6103096004803603602081101561033157600080fd5b5035610c30565b6103776004803603602081101561034e57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610d37565b604080519115158252519081900360200190f35b610393610d6e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103cd5781810151838201526020016103b5565b50505050905090810190601f1680156103fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104256004803603602081101561041e57600080fd5b5035610e22565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6104876004803603604081101561046457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eab565b005b6104876004803603602081101561049f57600080fd5b5035610fee565b610487600480360360608110156104bc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611079565b610309611128565b610309611139565b6104876004803603606081101561050f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561113f565b6103776004803603602081101561055257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611147565b61058c6004803603602081101561058557600080fd5b503561115d565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018815158152602001806020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b8381101561063757818101518382015260200161061f565b50505050905090810190601f1680156106645780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b6103096004803603604081101561068f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611253565b6106cf600480360360208110156106c857600080fd5b503561128b565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681526bffffffffffffffffffffffff94851660208201529290941682850152909116606082015290519081900360800190f35b6104256112f0565b610425611314565b6103096004803603602081101561074457600080fd5b5035611338565b6104256004803603602081101561076157600080fd5b503561134e565b610393611376565b6103776004803603602081101561078657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6107ab61141f565b60405180826101c080838360005b838110156107d15781810151838201526020016107b9565b5050505090500191505060405180910390f35b610309600480360360208110156107fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115a7565b610487611643565b61048761175a565b61085a6004803603602081101561083d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661192f565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610425611978565b610393611994565b610487600480360360208110156108a657600080fd5b8101906020810181356401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460208302840111640100000000831117156108f557600080fd5b509092509050611a13565b6104876004803603604081101561091657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611b3d565b6104876004803603604081101561095157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cae565b6104876004803603608081101561098a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156109d257600080fd5b8201836020820111156109e457600080fd5b80359060200191846001830284011164010000000083111715610a0657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ebd945050505050565b61030960048036036020811015610a5d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ecb565b61039360048036036020811015610a9057600080fd5b5035611ede565b61048760048036036060811015610aad57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561224b565b61048760048036036020811015610af057600080fd5b810190602081018135640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846020830284011164010000000083111715610b3f57600080fd5b509092509050612346565b61030960048036036020811015610b6057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612470565b61037760048036036040811015610b9357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612482565b61048760048036036020811015610bce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166124bd565b61030960048036036020811015610c0157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661265f565b60fd6020526000908152604090205481565b6000610c3b82612672565b610ca657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e0000604482015290519081900360640190fd5b600082815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff740100000000000000000000000000000000000000009283900481169584019590955260019093015492831694820194909452929004166060820152610d2e8161267f565b9150505b919050565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526065602052604090205460ff1690565b609c8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e185780601f10610ded57610100808354040283529160200191610e18565b820191906000526020600020905b815481529060010190602001808311610dfb57829003601f168201915b5050505050905090565b6000610e2d82612672565b610e82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061465f602c913960400191505060405180910390fd5b506000908152609a602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610eb68261134e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146ba6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f5c61271c565b73ffffffffffffffffffffffffffffffffffffffff161480610f8a5750610f8a81610f8561271c565b612482565b610fdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806145846038913960400191505060405180910390fd5b610fe98383612720565b505050565b33600090815261015f602052604090205460ff1661106d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015290519081900360640190fd5b611076816127c0565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461111d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f6e6c7920427269646765526f75746572000000000000000000000000000000604482015290519081900360640190fd5b610fe9838383612a1d565b60006111346098612bb9565b905090565b60fb5481565b610fe9612bc4565b61015f6020526000908152604090205460ff1681565b600080606060008060008060006111738961134e565b73ffffffffffffffffffffffffffffffffffffffff8116600090815261015f602052604090205490985060ff1696506111ab89611ede565b60008a815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff8082168084526bffffffffffffffffffffffff7401000000000000000000000000000000000000000093849004811696850187905260019095015491821696840187905291900490921660608201819052949a509098509096509094509092506112458a610c30565b915050919395975091939597565b73ffffffffffffffffffffffffffffffffffffffff821660009081526097602052604081206112829083612c2b565b90505b92915050565b60fc602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff808316926bffffffffffffffffffffffff740100000000000000000000000000000000000000009182900481169392831692919091041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611346609884612c37565b509392505050565b6000611285826040518060600160405280602981526020016145e66029913960989190612c53565b609f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e185780601f10610ded57610100808354040283529160200191610e18565b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902054151590565b611427614423565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b600073ffffffffffffffffffffffffffffffffffffffff8216611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145bc602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260976020526040902061128590612bb9565b61164b61271c565b73ffffffffffffffffffffffffffffffffffffffff16611669611978565b73ffffffffffffffffffffffffffffffffffffffff16146116eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c95460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360c980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b603254610100900460ff16806117735750611773612c6a565b80611781575060325460ff16155b6117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff1615801561183c57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611844612c7b565b6118b86040518060400160405280600981526020017f4e6f6d6164204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6e6f4e4654000000000000000000000000000000000000000000000000000000815250612f0c565b6118f66040518060400160405280601681526020017f68747470733a2f2f6e66742e6e6f6d61642e78797a2f0000000000000000000081525061303b565b6118fe61304e565b801561107657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b73ffffffffffffffffffffffffffffffffffffffff166000908152602081815260408083205460fd83528184205461012d84528285205461012e90945291909320549293909290565b60c95473ffffffffffffffffffffffffffffffffffffffff1690565b609d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e185780601f10610ded57610100808354040283529160200191610e18565b611a1b61271c565b73ffffffffffffffffffffffffffffffffffffffff16611a39611978565b73ffffffffffffffffffffffffffffffffffffffff1614611abb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81811015610fe957600161015f6000858585818110611ad957fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611abe565b611b4561271c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80609b6000611bec61271c565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155611c5b61271c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b611cb661271c565b73ffffffffffffffffffffffffffffffffffffffff16611cd4611978565b73ffffffffffffffffffffffffffffffffffffffff1614611d5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611d9773ffffffffffffffffffffffffffffffffffffffff83167f000000000000000000000000000000000000000000000000000000000000000083613140565b73ffffffffffffffffffffffffffffffffffffffff8216600081815261012e602090815260408083205461012d8352928190205481517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915193900393926370a0823192602480840193919291829003018186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b50511015611eb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f766520616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b611ec5612bc4565b50505050565b61012e6020526000908152604090205481565b6060611ee982612672565b611f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061468b602f913960400191505060405180910390fd5b6000828152609e602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015611fef5780601f10611fc457610100808354040283529160200191611fef565b820191906000526020600020905b815481529060010190602001808311611fd257829003601f168201915b505050505090506000612000611376565b905080516000141561201457509050610d32565b81511561212f5780826040516020018083805190602001908083835b6020831061206d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612030565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b602083106120f157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120b4565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610d32565b80612139856131cd565b6040516020018083805190602001908083835b6020831061218957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161214c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061220d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016121d0565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b61225361271c565b73ffffffffffffffffffffffffffffffffffffffff16612271611978565b73ffffffffffffffffffffffffffffffffffffffff16146122f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61231573ffffffffffffffffffffffffffffffffffffffff83168430846132fa565b73ffffffffffffffffffffffffffffffffffffffff909116600090815261012d602052604090208054909101905550565b61234e61271c565b73ffffffffffffffffffffffffffffffffffffffff1661236c611978565b73ffffffffffffffffffffffffffffffffffffffff16146123ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81811015610fe957600061015f600085858581811061240c57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016123f1565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152609b6020908152604080832093909416825291909152205460ff1690565b6124c561271c565b73ffffffffffffffffffffffffffffffffffffffff166124e3611978565b73ffffffffffffffffffffffffffffffffffffffff161461256557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145386026913960400191505060405180910390fd5b60c95460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61012d6020526000908152604090205481565b600061128560988361338f565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526020818152604080832054828601518651909516845261012d909252822054919283926bffffffffffffffffffffffff90911602816126d957fe5b04905082606001516bffffffffffffffffffffffff16811015612700576000915050610d32565b60608301516bffffffffffffffffffffffff1690039050919050565b3390565b6000818152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061277a8261134e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006127cb8261134e565b905073ffffffffffffffffffffffffffffffffffffffff8116331461285157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f6e6c79204e465420686f6c6465722063616e207265636f7665720000000000604482015290519081900360640190fd5b600082815260fc602090815260408083208151608081018352815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff7401000000000000000000000000000000000000000092839004811696840196909652600190930154928316938201939093529190049091166060820152906128db8261267f565b90508061294957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63757272656e746c792066756c6c79207265636f766572656400000000000000604482015290519081900360640190fd5b815173ffffffffffffffffffffffffffffffffffffffff808216600081815261012e6020908152604080832080548801905589835260fc82529182902060010180546bffffffffffffffffffffffff7401000000000000000000000000000000000000000080830482168a0190911602908616179055815186815291519388169389927f17d2c50d23ce305bb9110cc7ebdad11256efdcde5771581f8a57202e4eafaff692908290030190a4612a1673ffffffffffffffffffffffffffffffffffffffff82168584613140565b5050505050565b60fb805460018101909155612a32838261339b565b600081815260fc6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8a81169182178116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8b160217845560019093018054909216928916929092179055835260fd80835281842080548701908190558484529190932054929091521115612b4d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80856040518082815260200191505060405180910390a450505050565b6000611285826133b5565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e73666572730000000000000000000000000000000000000000604482015290519081900360640190fd5b600061128283836133b9565b6000808080612c468686613437565b9097909650945050505050565b6000612c608484846134cc565b90505b9392505050565b6000612c75306135b0565b15905090565b600060208190526417f117200f7ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec8556904d7b58372297b8deaf97f2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a455654f5aa599f7c07fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d556a05873e2ff48e466ba2a59d7f27e997bcf7e34b5892c35718d72ca8a4d44f6f77265e19fe4feb6a8ebb16cc7b556507d8748182137fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac63042556a03c00b5742b19f454142857f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541556a5dce3546a3de30fc55c6007f9cdb9ef8486d08aeebffa8fc9bbb85a20624c3ec8359d0fa1781366bd9aea8ad55699bf5a4d57a26c3c9d3b07f55813e084f33673b4b20bdc0331a65033a42722331e3f55a70ef815e1ddd4fb4556b01ab04465765b7c37a9b10007f65d12645f02a494bda192fbb7d0176b7df838fe8410c311663defbb56bfe7c28556a05f94e3dd1d341a8a949207fd50ff4d0ac27265152d143aec668d4c99a8fc77655d8a62125d1a4d3cd59087b55691692887ced913385b7807f541919c86040022d9e18ea6a255cd26949db2e27ffdd387787ea434611d53f44556a30a52129bcbbb1a75b6ac07f5f5fc63651242af2cb273d90cb6dd24751f30b6c885d12f328d3de3f13cba808556a09c3302fbb8195460740007f6fc1d9f3e3a05044d624fd126acdcb494d565eda599ac28936ba2e25ca06a62c5573f1dc500fde233a4055e25e5bbf516372bc4f6871905269444f9a32d89d50eec9647f9754ecc4659a29acf96c52a3094f54ed36634a7cb944ee6f2311c46b1437563355565b603254610100900460ff1680612f255750612f25612c6a565b80612f33575060325460ff16155b612f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff16158015612fee57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612ff66135b6565b612ffe6136c8565b61300883836137d3565b8015610fe957603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b8051611eb990609f906020840190614442565b603254610100900460ff16806130675750613067612c6a565b80613075575060325460ff16155b6130ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff1615801561313057603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6131386135b6565b6118fe613958565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610fe9908490613ae8565b60608161320e575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d32565b8160005b811561322657600101600a82049150613212565b60008167ffffffffffffffff8111801561323f57600080fd5b506040519080825280601f01601f19166020018201604052801561326a576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b83156132f157600a840660300160f81b828280600190039350815181106132b757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613294565b50949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611ec5908590613ae8565b60006112828383613bc0565b611eb9828260405180602001604052806000815250613bd8565b5490565b81546000908210613415576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806144e46022913960400191505060405180910390fd5b82600001828154811061342457fe5b9060005260206000200154905092915050565b815460009081908310613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061463d6022913960400191505060405180910390fd5b60008460000184815481106134a657fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281613581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561354657818101518382015260200161352e565b50505050905090810190601f1680156135735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061359457fe5b9060005260206000209060020201600101549150509392505050565b3b151590565b603254610100900460ff16806135cf57506135cf612c6a565b806135dd575060325460ff16155b613632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff161580156118fe57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561107657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b603254610100900460ff16806136e157506136e1612c6a565b806136ef575060325460ff16155b613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff161580156137aa57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6118fe7f01ffc9a700000000000000000000000000000000000000000000000000000000613c44565b603254610100900460ff16806137ec57506137ec612c6a565b806137fa575060325460ff16155b61384f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff161580156138b557603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b82516138c890609c906020860190614442565b5081516138dc90609d906020850190614442565b506139067f80ac58cd00000000000000000000000000000000000000000000000000000000613c44565b61392f7f5b5e139f00000000000000000000000000000000000000000000000000000000613c44565b6130087f780e9d6300000000000000000000000000000000000000000000000000000000613c44565b603254610100900460ff16806139715750613971612c6a565b8061397f575060325460ff16155b6139d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061460f602e913960400191505060405180910390fd5b603254610100900460ff16158015613a3a57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000613a4461271c565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561107657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6000613b4a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613d309092919063ffffffff16565b805190915015610fe957808060200190516020811015613b6957600080fd5b5051610fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806146db602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b613be28383613d3f565b613bef6000848484613ec8565b610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806145066032913960400191505060405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008082161415613cd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016600090815260656020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6060612c6084846000856140d9565b73ffffffffffffffffffffffffffffffffffffffff8216613dc157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613dca81612672565b15613e3657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613e4260008383610fe9565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020613e719082614293565b50613e7e6098828461429f565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000613ee98473ffffffffffffffffffffffffffffffffffffffff166135b0565b613ef5575060016140d1565b600061406d7f150b7a0200000000000000000000000000000000000000000000000000000000613f2361271c565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613fa4578181015183820152602001613f8c565b50505050905090810190601f168015613fd15780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603281526020016145066032913973ffffffffffffffffffffffffffffffffffffffff88169190613d30565b9050600081806020019051602081101561408657600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014925050505b949350505050565b606082471015614134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061455e6026913960400191505060405180910390fd5b61413d856135b0565b6141a857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061421157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016141d4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614273576040519150601f19603f3d011682016040523d82523d6000602084013e614278565b606091505b50915091506142888282866142c2565b979650505050505050565b60006112828383614342565b6000612c60848473ffffffffffffffffffffffffffffffffffffffff851661438c565b606083156142d1575081612c63565b8251156142e15782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561354657818101518382015260200161352e565b600061434e8383613bc0565b61438457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611285565b506000611285565b6000828152600184016020526040812054806143f1575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612c63565b8285600001600183038154811061440457fe5b9060005260206000209060020201600101819055506000915050612c63565b604051806101c00160405280600e906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261447857600085556144be565b82601f1061449157805160ff19168380011785556144be565b828001600101855582156144be579182015b828111156144be5782518255916020019190600101906144a3565b506144ca9291506144ce565b5090565b5b808211156144ca57600081556001016144cf56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a",
    "sourceMap": "9014:2757:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1059:46;;;;;;;;;;;;;;;;-1:-1:-1;1059:46:40;;;;:::i;:::-;;;;;;;;;;;;;;;;7410:214;;;;;;;;;;;;;;;;-1:-1:-1;7410:214:40;;:::i;1176:148:8:-;;;;;;;;;;;;;;;;-1:-1:-1;1176:148:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5113:98:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7840:217;;;;;;;;;;;;;;;;-1:-1:-1;7840:217:12;;:::i;:::-;;;;;;;;;;;;;;;;;;;7362:417;;;;;;;;;;;;;;;;-1:-1:-1;7362:417:12;;;;;;;;;:::i;:::-;;9669:81:40;;;;;;;;;;;;;;;;-1:-1:-1;9669:81:40;;:::i;4313:226:39:-;;;;;;;;;;;;;;;;-1:-1:-1;4313:226:39;;;;;;;;;;;;;;;;;;:::i;6856:208:12:-;;;:::i;895:21:40:-;;;:::i;3197:162::-;;;;;;;;;;;;;;;;-1:-1:-1;3197:162:40;;;;;;;;;;;;;;;;;;:::i;9132:41::-;;;;;;;;;;;;;;;;-1:-1:-1;9132:41:40;;;;:::i;11065:704::-;;;;;;;;;;;;;;;;-1:-1:-1;11065:704:40;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6625:160:12;;;;;;;;;;;;;;;;-1:-1:-1;6625:160:12;;;;;;;;;:::i;965:41:40:-;;;;;;;;;;;;;;;;-1:-1:-1;965:41:40;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4275:39;;;:::i;466:37:39:-;;;:::i;7136:169:12:-;;;;;;;;;;;;;;;;-1:-1:-1;7136:169:12;;:::i;4876:175::-;;;;;;;;;;;;;;;;-1:-1:-1;4876:175:12;;:::i;6451:95::-;;;:::i;2953:163:39:-;;;;;;;;;;;;;;;;-1:-1:-1;2953:163:39;;;;:::i;3187:938::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:218:12;;;;;;;;;;;;;;;;-1:-1:-1;4601:218:12;;;;:::i;1967:145:7:-;;;:::i;1939:200:40:-;;;:::i;5735:439::-;;;;;;;;;;;;;;;;-1:-1:-1;5735:439:40;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1335:85:7;;;:::i;5275:102:12:-;;;:::i;9868:167:40:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9868:167:40;;-1:-1:-1;9868:167:40;-1:-1:-1;9868:167:40;:::i;8124:290:12:-;;;;;;;;;;;;;;;;-1:-1:-1;8124:290:12;;;;;;;;;;;:::i;6279:314:40:-;;;;;;;;;;;;;;;;-1:-1:-1;6279:314:40;;;;;;;;;:::i;3659:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3659:197:40;;-1:-1:-1;3659:197:40;;-1:-1:-1;;;;;3659:197:40:i;4497:49::-;;;;;;;;;;;;;;;;-1:-1:-1;4497:49:40;;;;:::i;5443:776:12:-;;;;;;;;;;;;;;;;-1:-1:-1;5443:776:12;;:::i;6955:334:40:-;;;;;;;;;;;;;;;;-1:-1:-1;6955:334:40;;;;;;;;;;;;;;;;;;:::i;10161:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10161:171:40;;-1:-1:-1;10161:171:40;-1:-1:-1;10161:171:40;:::i;569:48:39:-;;;;;;;;;;;;;;;;-1:-1:-1;569:48:39;;;;:::i;8480:162:12:-;;;;;;;;;;;;;;;;-1:-1:-1;8480:162:12;;;;;;;;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;4377:49:40:-;;;;;;;;;;;;;;;;-1:-1:-1;4377:49:40;;;;:::i;1059:46::-;;;;;;;;;;;;;:::o;7410:214::-;7465:7;7492:12;7500:3;7492:7;:12::i;:::-;7484:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7549:18;7570:12;;;:7;:12;;;;;;;;;7549:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7599:18;7549:33;7599:12;:18::i;:::-;7592:25;;;7410:214;;;;:::o;1176:148:8:-;1284:33;;1261:4;1284:33;;;:20;:33;;;;;;;;;1176:148::o;5113:98:12:-;5199:5;5192:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5167:13;;5192:12;;5199:5;;5192:12;;5199:5;5192:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5113:98;:::o;7840:217::-;7916:7;7943:16;7951:7;7943;:16::i;:::-;7935:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8026:24:12;;;;:15;:24;;;;;;;;;7840:217::o;7362:417::-;7442:13;7458:34;7484:7;7458:25;:34::i;:::-;7442:50;;7516:5;7510:11;;:2;:11;;;;7502:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7594:5;7578:21;;:12;:10;:12::i;:::-;:21;;;:80;;;;7603:55;7638:5;7645:12;:10;:12::i;:::-;7603:34;:55::i;:::-;7570:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7751:21;7760:2;7764:7;7751:8;:21::i;:::-;7362:417;;;:::o;9669:81:40:-;9551:10;9541:21;;;;:9;:21;;;;;;;;9533:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9730:13:::1;9739:3;9730:8;:13::i;:::-;9669:81:::0;:::o;4313:226:39:-;4443:10;:26;4457:12;4443:26;;4435:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4501:31;4509:6;4517:5;4524:7;4501;:31::i;6856:208:12:-;6917:7;7036:21;:12;:19;:21::i;:::-;7029:28;;6856:208;:::o;895:21:40:-;;;;:::o;3197:162::-;3338:14;:12;:14::i;9132:41::-;;;;;;;;;;;;;;;:::o;11065:704::-;11152:15;11181;11210:18;11242:14;11270:23;11307:21;11342:18;11374:20;11429:12;11437:3;11429:7;:12::i;:::-;11464:18;;;;;;;:9;:18;;;;;;11419:22;;-1:-1:-1;11464:18:40;;;-1:-1:-1;11499:13:40;11508:3;11499:8;:13::i;:::-;11522:18;11543:12;;;:7;:12;;;;;;;;;11522:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11492:20;;-1:-1:-1;11522:33:40;;-1:-1:-1;11522:33:40;;-1:-1:-1;11522:33:40;;-1:-1:-1;11522:33:40;;-1:-1:-1;11746:16:40;11551:3;11746:11;:16::i;:::-;11731:31;;11065:704;;;;;;;;;;:::o;6625:160:12:-;6748:20;;;6722:7;6748:20;;;:13;:20;;;;;:30;;6772:5;6748:23;:30::i;:::-;6741:37;;6625:160;;;;;:::o;965:41:40:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4275:39::-;;;:::o;466:37:39:-;;;:::o;7136:169:12:-;7211:7;;7252:22;:12;7268:5;7252:15;:22::i;:::-;-1:-1:-1;7230:44:12;7136:169;-1:-1:-1;;;7136:169:12:o;4876:175::-;4948:7;4974:70;4991:7;4974:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;6451:95::-;6531:8;6524:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6499:13;;6524:15;;6531:8;;6524:15;;6531:8;6524:15;;;;;;;;;;;;;;;;;;;;;;;;2953:163:39;3083:21;;3056:4;3083:21;;;;;;;;;;;:26;;;2953:163::o;3187:938::-;3275:26;;:::i;:::-;-1:-1:-1;3317:801:39;;;;;;;;3338:42;3317:801;;3394:42;3317:801;;;;3450:42;3317:801;;;;;;;3506:42;3317:801;;;;3562:42;3317:801;;;;3618:42;3317:801;;;;3674:42;3317:801;;;;3730:42;3317:801;;;;3786:42;3317:801;;;;3842:42;3317:801;;;;3898:42;3317:801;;;;3954:42;3317:801;;;;4010:42;3317:801;;;;4066:42;3317:801;;;;3187:938;:::o;4601:218:12:-;4673:7;4700:19;;;4692:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4783:20;;;;;;;:13;:20;;;;;:29;;:27;:29::i;1967:145:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2057:6:::1;::::0;2036:40:::1;::::0;2073:1:::1;::::0;2036:40:::1;2057:6;::::0;2036:40:::1;::::0;2073:1;;2036:40:::1;2086:6;:19:::0;;;::::1;::::0;;1967:145::o;1939:200:40:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1990:24:40::1;:22;:24::i;:::-;2024:35;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:13:::1;:35::i;:::-;2069:37;;;;;;;;;;;;;;;;;::::0;:11:::1;:37::i;:::-;2116:16;:14;:16::i;:::-;1794:14:11::0;1790:66;;;1824:13;:21;;;;;;1939:200:40;:::o;5735:439::-;6002:21;;5830:22;6002:21;;;;;;;;;;;;6048:11;:19;;;;;;6095:14;:22;;;;;;6145:14;:22;;;;;;;;6002:21;;6048:19;;6145:22;5735:439::o;1335:85:7:-;1407:6;;;;1335:85;:::o;5275:102:12:-;5363:7;5356:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5331:13;;5356:14;;5363:7;;5356:14;;5363:7;5356:14;;;;;;;;;;;;;;;;;;;;;;;;9868:167:40;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9942:9:40::1;9937:92;9957:15:::0;;::::1;9937:92;;;10014:4;9993:9;:18;10003:4;;10008:1;10003:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;;;9993:18:::0;;-1:-1:-1;9993:18:40;::::1;::::0;;;;;;-1:-1:-1;9993:18:40;:25;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;9974:3:40::1;9937:92;;8124:290:12::0;8238:12;:10;:12::i;:::-;8226:24;;:8;:24;;;;8218:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8336:8;8291:18;:32;8310:12;:10;:12::i;:::-;8291:32;;;;;;;;;;;;;;;;;;-1:-1:-1;8291:32:12;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;8374:12;:10;:12::i;:::-;8359:48;;;8398:8;8359:48;;;;;;;;;;;;;;;;;;;;8124:290;;:::o;6279:314:40:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6357:52:40::1;:27;::::0;::::1;6385:14;6401:7:::0;6357:27:::1;:52::i;:::-;6524:22;::::0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;;;6499:14:::1;:22:::0;;;;;;;6440:39;;;;;6473:4:::1;6440:39;::::0;::::1;::::0;;;6499:47;;::::1;::::0;6524:22;6440:24:::1;::::0;:39;;;;;6524:22;;6440:39;;;;;;6524:22;6440:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6440:39:40;:106:::1;;6419:167;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6279:314:::0;;:::o;3659:197::-;3835:14;:12;:14::i;:::-;3659:197;;;;:::o;4497:49::-;;;;;;;;;;;;;:::o;5443:776:12:-;5516:13;5549:16;5557:7;5549;:16::i;:::-;5541:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:23;5654:19;;;:10;:19;;;;;;;;5628:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5654:19;;5628:45;;;5654:19;5628:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5683:18;5704:9;:7;:9::i;:::-;5683:30;;5792:4;5786:18;5808:1;5786:23;5782:70;;;-1:-1:-1;5832:9:12;-1:-1:-1;5825:16:12;;5782:70;5954:23;;:27;5950:106;;6028:4;6034:9;6011:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6011:33:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5997:48;;;;;;5950:106;6186:4;6192:18;:7;:16;:18::i;:::-;6169:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6169:42:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:57;;;;5443:776;;;:::o;6955:334:40:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7138:65:40::1;:31;::::0;::::1;7170:8:::0;7188:4:::1;7195:7:::0;7138:31:::1;:65::i;:::-;7249:22;::::0;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:33;;;;::::1;::::0;;-1:-1:-1;6955:334:40:o;10161:171::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10238:9:40::1;10233:93;10253:15:::0;;::::1;10233:93;;;10310:5;10289:9;:18;10299:4;;10304:1;10299:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;;;10289:18:::0;;-1:-1:-1;10289:18:40;::::1;::::0;;;;;;-1:-1:-1;10289:18:40;:26;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;10270:3:40::1;10233:93;;569:48:39::0;;;;;;;;;;;;;;:::o;8480:162:12:-;8600:25;;;;8577:4;8600:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;8480:162::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;4377:49:40:-;;;;;;;;;;;;;:::o;11001:125:12:-;11066:4;11089:30;:12;11111:7;11089:21;:30::i;8511:460:40:-;8703:10;;8689:25;;;;8576:7;8689:25;;;;;;;;;;;;8673:11;;;;8639:10;;8624:26;;;;;:14;:26;;;;;;8576:7;;;;8665:20;;;;8624:61;8689:25;8623:91;;;;;8595:119;;8805:4;:14;;;8797:23;;8777:17;:43;8773:57;;;8829:1;8822:8;;;;;8773:57;8949:14;;;;8941:23;;8921:43;;;-1:-1:-1;8511:460:40;;;:::o;828:104:18:-;915:10;828:104;:::o;16898:200:12:-;16972:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;17025:34;16972:24;17025:25;:34::i;:::-;17016:57;;;;;;;;;;;;16898:200;;:::o;7689:725:40:-;7739:13;7755:12;7763:3;7755:7;:12::i;:::-;7739:28;-1:-1:-1;7785:19:40;;;7794:10;7785:19;7777:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7894:18;7915:12;;;:7;:12;;;;;;;;7894:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7955:18;7894:33;7955:12;:18::i;:::-;7937:36;-1:-1:-1;7991:12:40;7983:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8138:10;;8158:22;;;;8121:14;8158:22;;;:14;:22;;;;;;;;:33;;;;;;8201:12;;;:7;:12;;;;;;-1:-1:-1;8201:22:40;:41;;;;;;;;;;;;;;;;;;;;;8279:37;;;;;;;;;;;8209:3;;8279:37;;;;;;;;;8364:43;:27;;;8392:5;8399:7;8364:27;:43::i;:::-;7689:725;;;;;:::o;2338:792::-;2499:6;;;2530:1;2524:7;;2515:16;;;2541:21;2551:5;2499:6;2541:9;:21::i;:::-;2572:12;;;;:7;:12;;;;;;;;:27;;;;;;;;;;;;;2609:37;;;;;;;;;;-1:-1:-1;2656:25:40;;;:33;;;;;;;;;;;;;;2791:19;;:11;:19;;;;;;:30;;;;;;;;3009:21;;;;;;;;2986:19;;;;:44;;2978:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3108:5;3080:43;;3100:6;3080:43;;3095:3;3080:43;3115:7;3080:43;;;;;;;;;;;;;;;;;;2338:792;;;;:::o;7831:121:19:-;7900:7;7926:19;7934:3;7926:7;:19::i;3955:77:40:-;4003:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9261:135:20;9332:7;9366:22;9370:3;9382:5;9366:3;:22::i;8280:233:19:-;8360:7;;;;8419:22;8423:3;8435:5;8419:3;:22::i;:::-;8388:53;;;;-1:-1:-1;8280:233:19;-1:-1:-1;;;;;8280:233:19:o;9533:211::-;9640:7;9690:44;9695:3;9715;9721:12;9690:4;:44::i;:::-;9682:53;-1:-1:-1;9533:211:19;;;;;;:::o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;944:1797:39:-;1046:13;:79;;;;1128:15;1046:79;:97;1235:30;1153:79;:112;1357:18;1275:79;:100;1467:33;1385:79;:115;1592:17;1510:79;:99;1701:33;1619:79;:115;1826:35;1744:79;:117;1953:31;1871:79;:113;2076:35;1994:79;:117;2203:33;2121:79;:115;2328:31;2246:79;:113;2451:34;2369:79;:116;2577:34;2495:79;:116;2648:42;2621:79;;2703:31;2621:79;:113;944:1797::o;3918:215:12:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;4016:26:12::1;:24;:26::i;:::-;4052:25;:23;:25::i;:::-;4087:39;4111:5;4118:7;4087:23;:39::i;:::-;1794:14:11::0;1790:66;;;1824:13;:21;;;;;;3918:215:12;;;:::o;15535:98::-;15607:19;;;;:8;;:19;;;;;:::i;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;704:175:28:-:0;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;221:725:21:-;277:13;494:10;490:51;;-1:-1:-1;520:10:21;;;;;;;;;;;;;;;;;;;490:51;565:5;550:12;604:75;611:9;;604:75;;636:8;;666:2;658:10;;;;604:75;;;688:19;720:6;710:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:17:21;-1:-1:-1;780:5:21;;-1:-1:-1;688:39:21;-1:-1:-1;753:10:21;;;795:114;802:9;;795:114;;870:2;863:4;:9;858:2;:14;845:29;;827:6;834:7;;;;;;;827:15;;;;;;;;;;;:47;;;;;;;;;;-1:-1:-1;896:2:21;888:10;;;;795:114;;;-1:-1:-1;932:6:21;221:725;-1:-1:-1;;;;221:725:21:o;885:203:28:-;1012:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:27;1012:68;;;985:96;;1005:5;;985:19;:96::i;7599:149:19:-;7683:4;7706:35;7716:3;7736;7706:9;:35::i;11988:108:12:-;12063:26;12073:2;12077:7;12063:26;;;;;;;;;;;;:9;:26::i;4502:108:19:-;4584:19;;4502:108::o;4463:201:20:-;4557:18;;4530:7;;4557:26;-1:-1:-1;4549:73:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4639:3;:11;;4651:5;4639:18;;;;;;;;;;;;;;;;4632:25;;4463:201;;;;:::o;4953:274:19:-;5056:19;;5020:7;;;;5056:27;-1:-1:-1;5048:74:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5133:22;5158:3;:12;;5171:5;5158:19;;;;;;;;;;;;;;;;;;5133:44;;5195:5;:10;;;5207:5;:12;;;5187:33;;;;;4953:274;;;;;:::o;6414:315::-;6508:7;6546:17;;;:12;;;:17;;;;;;6596:12;6581:13;6573:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6662:3;:12;;6686:1;6675:8;:12;6662:26;;;;;;;;;;;;;;;;;;:33;;;6655:40;;;6414:315;;;;;:::o;737:413:17:-;1097:20;1135:8;;;737:413::o;759:64:18:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1824:13;:21;;;;;;759:64:18;:::o;777:249:8:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;979:40:8::1;998:20:::0;979:18:::1;:40::i;4139:403:12:-:0;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;4247:13:12;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;4270:17:12;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;4375:40:12::1;4394:20:::0;4375:18:::1;:40::i;:::-;4425:49;4444:29:::0;4425:18:::1;:49::i;:::-;4484:51;4503:31:::0;4484:18:::1;:51::i;1067:192:7:-:0;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:11;1794:14:::0;1790:66;;;1824:13;:21;;;;;;1067:192:7;:::o;2967:751:28:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:28;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:28;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4289:123:19;4360:4;4383:17;;;:12;;;;;:17;;;;;;:22;;;4289:123::o;12317:247:12:-;12412:18;12418:2;12422:7;12412:5;:18::i;:::-;12448:54;12479:1;12483:2;12487:7;12496:5;12448:22;:54::i;:::-;12440:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1718:198:8;1801:25;;;;;;1793:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1869:33;;;;;;:20;:33;;;;;:40;;;;1905:4;1869:40;;;1718:198::o;3581:193:29:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;12886:393:12:-;12965:16;;;12957:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13037:16;13045:7;13037;:16::i;:::-;13036:17;13028:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13097:45;13126:1;13130:2;13134:7;13097:20;:45::i;:::-;13153:17;;;;;;;:13;:17;;;;;:30;;13175:7;13153:21;:30::i;:::-;-1:-1:-1;13194:29:12;:12;13211:7;13220:2;13194:16;:29::i;:::-;-1:-1:-1;13239:33:12;;13264:7;;13239:33;;;;13256:1;;13239:33;;13256:1;;13239:33;12886:393;;:::o;16186:600::-;16306:4;16331:15;:2;:13;;;:15::i;:::-;16326:58;;-1:-1:-1;16369:4:12;16362:11;;16326:58;16393:23;16419:257;16471:56;16541:12;:10;:12::i;:::-;16567:4;16585:7;16606:5;16435:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16419:257;;;;;;;;;;;;;;;;;:15;;;;:257;:15;:257::i;:::-;16393:283;;16686:13;16713:10;16702:32;;;;;;;;;;;;;;;-1:-1:-1;16702:32:12;16752:26;;16762:16;16752:26;;-1:-1:-1;;;16186:600:12;;;;;;;:::o;4608:523:29:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:29:o;8079:129:20:-;8146:4;8169:32;8174:3;8194:5;8169:4;:32::i;7038:183:19:-;7127:4;7150:64;7155:3;7175;7189:23;;;7150:4;:64::i;7091:725:29:-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:29;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:404:20;1714:4;1735:21;1745:3;1750:5;1735:9;:21::i;:::-;1730:319;;-1:-1:-1;1772:23:20;;;;;;;;:11;:23;;;;;;;;;;;;;1952:18;;1930:19;;;:12;;;:19;;;;;;:40;;;;1984:11;;1730:319;-1:-1:-1;2033:5:20;2026:12;;1847:678:19;1923:4;2056:17;;;:12;;;:17;;;;;;2088:13;2084:435;;-1:-1:-1;;2172:38:19;;;;;;;;;;;;;;;;;;2154:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;2366:19;;2346:17;;;:12;;;:17;;;;;;;:39;2399:11;;2084:435;2477:5;2441:3;:12;;2465:1;2454:8;:12;2441:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2503:5;2496:12;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;",
    "linkReferences": {},
    "immutableReferences": {
      "32615": [
        {
          "start": 4241,
          "length": 32
        },
        {
          "start": 4886,
          "length": 32
        }
      ],
      "33030": [
        {
          "start": 4850,
          "length": 32
        },
        {
          "start": 7538,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "affectedAssets()": "7013ca26",
    "allow(address[])": "987c5ced",
    "allowList(address)": "2848aeaf",
    "approve(address,uint256)": "095ea7b3",
    "assetInfo(address)": "8b0dcb4e",
    "balanceOf(address)": "70a08231",
    "baseURI()": "6c0360eb",
    "bridgeRouter()": "41af5b52",
    "collect(address,address,uint256)": "c8fea2fb",
    "disallow(address[])": "ca091ef3",
    "fundsRecipient()": "3b6fd2cf",
    "getApproved(uint256)": "081812fc",
    "info(uint256)": "2e340599",
    "initialize()": "8129fc1c",
    "isAffectedAsset(address)": "6c267633",
    "isApprovedForAll(address,address)": "e985e9c5",
    "name()": "06fdde03",
    "nextID()": "1e96917d",
    "owner()": "8da5cb5b",
    "ownerOf(uint256)": "6352211e",
    "record(address,address,uint256)": "172a93fb",
    "records(uint256)": "34461067",
    "recover(uint256)": "0ca35682",
    "recoverable(uint256)": "00c12c31",
    "remove(address,uint256)": "abe7f1ab",
    "renounceOwnership()": "715018a6",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenByIndex(uint256)": "4f6ccce7",
    "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
    "tokenURI(uint256)": "c87b56dd",
    "totalAffected(address)": "e271f8e3",
    "totalCollected(address)": "f3f05313",
    "totalMinted(address)": "003d4790",
    "totalRecovered(address)": "bf799f2b",
    "totalSupply()": "18160ddd",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/accountants/NFTAccountant.sol",
    "id": 33523,
    "exportedSymbols": {
      "AllowListNFTRecoveryAccountant": [
        33522
      ],
      "ERC721Upgradeable": [
        24650
      ],
      "EventAccountant": [
        32803
      ],
      "IERC20": [
        27517
      ],
      "NFTAccountant": [
        33021
      ],
      "NFTRecoveryAccountant": [
        33330
      ],
      "OwnableUpgradeable": [
        23168
      ],
      "SafeERC20": [
        27730
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:11726:40",
    "nodes": [
      {
        "id": 32805,
        "nodeType": "PragmaDirective",
        "src": "46:22:40",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 32807,
        "nodeType": "ImportDirective",
        "src": "116:54:40",
        "absolutePath": "packages/contracts-bridge/contracts/accountants/EventAccountant.sol",
        "file": "./EventAccountant.sol",
        "scope": 33523,
        "sourceUnit": 32804,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32806,
              "name": "EventAccountant",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:15:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32809,
        "nodeType": "ImportDirective",
        "src": "217:70:40",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 33523,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32808,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "225:6:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32811,
        "nodeType": "ImportDirective",
        "src": "288:76:40",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "scope": 33523,
        "sourceUnit": 27731,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32810,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "296:9:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32813,
        "nodeType": "ImportDirective",
        "src": "365:105:40",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
        "scope": 33523,
        "sourceUnit": 24651,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32812,
              "name": "ERC721Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "373:17:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32815,
        "nodeType": "ImportDirective",
        "src": "471:101:40",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "scope": 33523,
        "sourceUnit": 23169,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32814,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "479:18:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 33021,
        "nodeType": "ContractDefinition",
        "src": "574:3460:40",
        "nodes": [
          {
            "id": 32830,
            "nodeType": "StructDefinition",
            "src": "738:123:40",
            "canonicalName": "NFTAccountant.Record",
            "members": [
              {
                "constant": false,
                "id": 32823,
                "mutability": "mutable",
                "name": "asset",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "762:13:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 32822,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "762:7:40",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32825,
                "mutability": "mutable",
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "785:13:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 32824,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "785:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32827,
                "mutability": "mutable",
                "name": "originalUser",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "808:20:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 32826,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "808:7:40",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32829,
                "mutability": "mutable",
                "name": "recovered",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "838:16:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 32828,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "838:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "scope": 33021,
            "visibility": "public"
          },
          {
            "id": 32833,
            "nodeType": "VariableDeclaration",
            "src": "895:21:40",
            "constant": false,
            "documentation": {
              "id": 32831,
              "nodeType": "StructuredDocumentation",
              "src": "867:23:40",
              "text": "@notice next NFT ID"
            },
            "functionSelector": "1e96917d",
            "mutability": "mutable",
            "name": "nextID",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 32832,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "895:7:40",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 32838,
            "nodeType": "VariableDeclaration",
            "src": "965:41:40",
            "constant": false,
            "documentation": {
              "id": 32834,
              "nodeType": "StructuredDocumentation",
              "src": "922:38:40",
              "text": "@notice maps NFT ID to NFT details"
            },
            "functionSelector": "34461067",
            "mutability": "mutable",
            "name": "records",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
              "typeString": "mapping(uint256 => struct NFTAccountant.Record)"
            },
            "typeName": {
              "id": 32837,
              "keyType": {
                "id": 32835,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "973:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "965:26:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                "typeString": "mapping(uint256 => struct NFTAccountant.Record)"
              },
              "valueType": {
                "id": 32836,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 32830,
                "src": "984:6:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                  "typeString": "struct NFTAccountant.Record"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32843,
            "nodeType": "VariableDeclaration",
            "src": "1059:46:40",
            "constant": false,
            "documentation": {
              "id": 32839,
              "nodeType": "StructuredDocumentation",
              "src": "1012:42:40",
              "text": "@notice token address => amount minted"
            },
            "functionSelector": "003d4790",
            "mutability": "mutable",
            "name": "totalMinted",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 32842,
              "keyType": {
                "id": 32840,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1067:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1059:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 32841,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1078:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32847,
            "nodeType": "VariableDeclaration",
            "src": "1188:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$47_storage",
              "typeString": "uint256[47]"
            },
            "typeName": {
              "baseType": {
                "id": 32844,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1188:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 32846,
              "length": {
                "hexValue": "3437",
                "id": 32845,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1196:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_47_by_1",
                  "typeString": "int_const 47"
                },
                "value": "47"
              },
              "nodeType": "ArrayTypeName",
              "src": "1188:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$47_storage_ptr",
                "typeString": "uint256[47]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 32858,
            "nodeType": "EventDefinition",
            "src": "1668:145:40",
            "anonymous": false,
            "documentation": {
              "id": 32848,
              "nodeType": "StructuredDocumentation",
              "src": "1220:443:40",
              "text": " @notice emitted when tokens would have been transferred, but the asset\n         was in the affected assets list\n @param id The token ID of the NFT minted\n @param asset The address of the affected token contract\n @param recipient The intended recipient of the tokens; the recipient in the\n                  transfer message\n @param amount The amount of tokens that would have been received"
            },
            "name": "ProcessFailure",
            "parameters": {
              "id": 32857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32850,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1698:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32849,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1698:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32852,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1726:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32851,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1726:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32854,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1757:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1757:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32856,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1792:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32855,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1792:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1688:124:40"
            }
          },
          {
            "id": 32868,
            "nodeType": "FunctionDefinition",
            "src": "1865:68:40",
            "body": {
              "id": 32867,
              "nodeType": "Block",
              "src": "1931:2:40",
              "statements": []
            },
            "documentation": {
              "id": 32859,
              "nodeType": "StructuredDocumentation",
              "src": "1819:41:40",
              "text": "============ Constructor ============"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 32864,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32861,
                    "src": "1916:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 32865,
                "modifierName": {
                  "id": 32863,
                  "name": "EventAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 32803,
                  "src": "1900:15:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_EventAccountant_$32803_$",
                    "typeString": "type(contract EventAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1900:30:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 32862,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32861,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 32868,
                  "src": "1877:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1876:23:40"
            },
            "returnParameters": {
              "id": 32866,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1931:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32889,
            "nodeType": "FunctionDefinition",
            "src": "1939:200:40",
            "body": {
              "id": 32888,
              "nodeType": "Block",
              "src": "1980:159:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32873,
                      "name": "__EventAccountant_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32724,
                      "src": "1990:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 32874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1990:24:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32875,
                  "nodeType": "ExpressionStatement",
                  "src": "1990:24:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4e6f6d6164204e4654",
                        "id": 32877,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2038:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73705ff8c87c78491cad94fc4048a87479751186d494b98ca380f44567eb66b3",
                          "typeString": "literal_string \"Nomad NFT\""
                        },
                        "value": "Nomad NFT"
                      },
                      {
                        "hexValue": "6e6f4e4654",
                        "id": 32878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2051:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_feeec76c1e7d99038cf05db3525f706c6ff9b99fb2150ec1af868e4275afd812",
                          "typeString": "literal_string \"noNFT\""
                        },
                        "value": "noNFT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_73705ff8c87c78491cad94fc4048a87479751186d494b98ca380f44567eb66b3",
                          "typeString": "literal_string \"Nomad NFT\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_feeec76c1e7d99038cf05db3525f706c6ff9b99fb2150ec1af868e4275afd812",
                          "typeString": "literal_string \"noNFT\""
                        }
                      ],
                      "id": 32876,
                      "name": "__ERC721_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23778,
                      "src": "2024:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 32879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2024:35:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32880,
                  "nodeType": "ExpressionStatement",
                  "src": "2024:35:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "68747470733a2f2f6e66742e6e6f6d61642e78797a2f",
                        "id": 32882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2081:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0ce0de2f36d89df2b311098b24ea05535edc351c8fecdb50dd3f24b3f9482ee",
                          "typeString": "literal_string \"https://nft.nomad.xyz/\""
                        },
                        "value": "https://nft.nomad.xyz/"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_d0ce0de2f36d89df2b311098b24ea05535edc351c8fecdb50dd3f24b3f9482ee",
                          "typeString": "literal_string \"https://nft.nomad.xyz/\""
                        }
                      ],
                      "id": 32881,
                      "name": "_setBaseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24552,
                      "src": "2069:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 32883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2069:37:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32884,
                  "nodeType": "ExpressionStatement",
                  "src": "2069:37:40"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32885,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23067,
                      "src": "2116:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 32886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2116:16:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32887,
                  "nodeType": "ExpressionStatement",
                  "src": "2116:16:40"
                }
              ]
            },
            "functionSelector": "8129fc1c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 32871,
                "modifierName": {
                  "id": 32870,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "1968:11:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1968:11:40"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 32869,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1958:2:40"
            },
            "returnParameters": {
              "id": 32872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1980:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32964,
            "nodeType": "FunctionDefinition",
            "src": "2338:792:40",
            "body": {
              "id": 32963,
              "nodeType": "Block",
              "src": "2451:679:40",
              "statements": [
                {
                  "assignments": [
                    32901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32901,
                      "mutability": "mutable",
                      "name": "_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 32963,
                      "src": "2485:11:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32900,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2485:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32903,
                  "initialValue": {
                    "id": 32902,
                    "name": "nextID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32833,
                    "src": "2499:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2485:20:40"
                },
                {
                  "expression": {
                    "id": 32908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32904,
                      "name": "nextID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32833,
                      "src": "2515:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 32907,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 32905,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "2524:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 32906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2530:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "2524:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2515:16:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32909,
                  "nodeType": "ExpressionStatement",
                  "src": "2515:16:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32911,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32894,
                        "src": "2551:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32912,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "2558:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32910,
                      "name": "_safeMint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24290,
                        24319
                      ],
                      "referencedDeclaration": 24290,
                      "src": "2541:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 32913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2541:21:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32914,
                  "nodeType": "ExpressionStatement",
                  "src": "2541:21:40"
                },
                {
                  "expression": {
                    "id": 32920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32915,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2572:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32917,
                        "indexExpression": {
                          "id": 32916,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2580:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2572:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32918,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32823,
                      "src": "2572:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32919,
                      "name": "_asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32892,
                      "src": "2593:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2572:27:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32921,
                  "nodeType": "ExpressionStatement",
                  "src": "2572:27:40"
                },
                {
                  "expression": {
                    "id": 32930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32922,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2609:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32924,
                        "indexExpression": {
                          "id": 32923,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2617:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2609:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32825,
                      "src": "2609:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 32928,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32896,
                          "src": "2638:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 32927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2631:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint96_$",
                          "typeString": "type(uint96)"
                        },
                        "typeName": {
                          "id": 32926,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "2631:6:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 32929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2631:15:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "2609:37:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 32931,
                  "nodeType": "ExpressionStatement",
                  "src": "2609:37:40"
                },
                {
                  "expression": {
                    "id": 32937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32932,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2656:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32934,
                        "indexExpression": {
                          "id": 32933,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2664:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2656:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32935,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "originalUser",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32827,
                      "src": "2656:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32936,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32894,
                      "src": "2684:5:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2656:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32938,
                  "nodeType": "ExpressionStatement",
                  "src": "2656:33:40"
                },
                {
                  "expression": {
                    "id": 32943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 32939,
                        "name": "totalMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32843,
                        "src": "2791:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 32941,
                      "indexExpression": {
                        "id": 32940,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32892,
                        "src": "2803:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2791:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 32942,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32896,
                      "src": "2814:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2791:30:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32944,
                  "nodeType": "ExpressionStatement",
                  "src": "2791:30:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 32952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 32946,
                            "name": "totalMinted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32843,
                            "src": "2986:11:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 32948,
                          "indexExpression": {
                            "id": 32947,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32892,
                            "src": "2998:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2986:19:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 32949,
                            "name": "totalAffected",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32620,
                            "src": "3009:13:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 32951,
                          "indexExpression": {
                            "id": 32950,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32892,
                            "src": "3023:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3009:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2986:44:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f7665726d696e74",
                        "id": 32953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3032:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        },
                        "value": "overmint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        }
                      ],
                      "id": 32945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2978:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2978:65:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32955,
                  "nodeType": "ExpressionStatement",
                  "src": "2978:65:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 32957,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "3095:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 32958,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32892,
                        "src": "3100:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32959,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32894,
                        "src": "3108:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32960,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32896,
                        "src": "3115:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32956,
                      "name": "ProcessFailure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32858,
                      "src": "3080:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 32961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:43:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32962,
                  "nodeType": "EmitStatement",
                  "src": "3075:48:40"
                }
              ]
            },
            "baseFunctions": [
              32802
            ],
            "documentation": {
              "id": 32890,
              "nodeType": "StructuredDocumentation",
              "src": "2145:188:40",
              "text": " @notice Records information to state and logs a ProcessFailure event\n @param _asset  The asset\n @param _user   The recipient\n @param _amount The amount"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_record",
            "overrides": {
              "id": 32898,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2442:8:40"
            },
            "parameters": {
              "id": 32897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32892,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2364:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2364:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32894,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2388:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32893,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2388:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32896,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2411:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32895,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2411:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2354:78:40"
            },
            "returnParameters": {
              "id": 32899,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2451:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32979,
            "nodeType": "FunctionDefinition",
            "src": "3197:162:40",
            "body": {
              "id": 32978,
              "nodeType": "Block",
              "src": "3328:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32975,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3338:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 32976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3338:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32977,
                  "nodeType": "ExpressionStatement",
                  "src": "3338:14:40"
                }
              ]
            },
            "baseFunctions": [
              24141
            ],
            "documentation": {
              "id": 32965,
              "nodeType": "StructuredDocumentation",
              "src": "3136:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "23b872dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "overrides": {
              "id": 32973,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3319:8:40"
            },
            "parameters": {
              "id": 32972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32967,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3228:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3228:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32969,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3254:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3254:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32971,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3278:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32970,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3278:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3218:85:40"
            },
            "returnParameters": {
              "id": 32974,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3328:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 32994,
            "nodeType": "FunctionDefinition",
            "src": "3426:166:40",
            "body": {
              "id": 32993,
              "nodeType": "Block",
              "src": "3561:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32990,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3571:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 32991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3571:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32992,
                  "nodeType": "ExpressionStatement",
                  "src": "3571:14:40"
                }
              ]
            },
            "baseFunctions": [
              24160
            ],
            "documentation": {
              "id": 32980,
              "nodeType": "StructuredDocumentation",
              "src": "3365:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "42842e0e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 32988,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3552:8:40"
            },
            "parameters": {
              "id": 32987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32982,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3461:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3461:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32984,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3487:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32983,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3487:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32986,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3511:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3511:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3451:85:40"
            },
            "returnParameters": {
              "id": 32989,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3561:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 33011,
            "nodeType": "FunctionDefinition",
            "src": "3659:197:40",
            "body": {
              "id": 33010,
              "nodeType": "Block",
              "src": "3825:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 33007,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3835:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 33008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3835:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33009,
                  "nodeType": "ExpressionStatement",
                  "src": "3835:14:40"
                }
              ]
            },
            "baseFunctions": [
              24190
            ],
            "documentation": {
              "id": 32995,
              "nodeType": "StructuredDocumentation",
              "src": "3598:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "b88d4fde",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 33005,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3816:8:40"
            },
            "parameters": {
              "id": 33004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32997,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3694:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32996,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3694:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32999,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3720:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3720:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33001,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3744:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33000,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3744:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33003,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3773:12:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 33002,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3773:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3684:116:40"
            },
            "returnParameters": {
              "id": 33006,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3825:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 33020,
            "nodeType": "FunctionDefinition",
            "src": "3955:77:40",
            "body": {
              "id": 33019,
              "nodeType": "Block",
              "src": "3993:39:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f207472616e7366657273",
                        "id": 33016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4010:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        },
                        "value": "no transfers"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        }
                      ],
                      "id": 33015,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "4003:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 33017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4003:22:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33018,
                  "nodeType": "ExpressionStatement",
                  "src": "4003:22:40"
                }
              ]
            },
            "documentation": {
              "id": 33012,
              "nodeType": "StructuredDocumentation",
              "src": "3862:88:40",
              "text": " @notice Revert with the same error message on any attempted transfers"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_noTransfers",
            "parameters": {
              "id": 33013,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3976:2:40"
            },
            "returnParameters": {
              "id": 33014,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3993:0:40"
            },
            "scope": 33021,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 32816,
              "name": "EventAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 32803,
              "src": "604:15:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EventAccountant_$32803",
                "typeString": "contract EventAccountant"
              }
            },
            "id": 32817,
            "nodeType": "InheritanceSpecifier",
            "src": "604:15:40"
          },
          {
            "baseName": {
              "id": 32818,
              "name": "ERC721Upgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24650,
              "src": "625:17:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721Upgradeable_$24650",
                "typeString": "contract ERC721Upgradeable"
              }
            },
            "id": 32819,
            "nodeType": "InheritanceSpecifier",
            "src": "625:17:40"
          },
          {
            "baseName": {
              "id": 32820,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23168,
              "src": "648:18:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 32821,
            "nodeType": "InheritanceSpecifier",
            "src": "648:18:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33635
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "NFTAccountant",
        "scope": 33523
      },
      {
        "id": 33330,
        "nodeType": "ContractDefinition",
        "src": "4069:4904:40",
        "nodes": [
          {
            "id": 33027,
            "nodeType": "UsingForDirective",
            "src": "4132:27:40",
            "libraryName": {
              "id": 33025,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27730,
              "src": "4138:9:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$27730",
                "typeString": "library SafeERC20"
              }
            },
            "typeName": {
              "id": 33026,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27517,
              "src": "4152:6:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$27517",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 33030,
            "nodeType": "VariableDeclaration",
            "src": "4275:39:40",
            "constant": false,
            "documentation": {
              "id": 33028,
              "nodeType": "StructuredDocumentation",
              "src": "4165:105:40",
              "text": "@notice the address that receives funds\n that should not have been transferred to the contract"
            },
            "functionSelector": "3b6fd2cf",
            "mutability": "immutable",
            "name": "fundsRecipient",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 33029,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "4275:7:40",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 33035,
            "nodeType": "VariableDeclaration",
            "src": "4377:49:40",
            "constant": false,
            "documentation": {
              "id": 33031,
              "nodeType": "StructuredDocumentation",
              "src": "4321:51:40",
              "text": "@notice token address => total amount collected"
            },
            "functionSelector": "f3f05313",
            "mutability": "mutable",
            "name": "totalCollected",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 33034,
              "keyType": {
                "id": 33032,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4385:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "4377:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 33033,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4396:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33040,
            "nodeType": "VariableDeclaration",
            "src": "4497:49:40",
            "constant": false,
            "documentation": {
              "id": 33036,
              "nodeType": "StructuredDocumentation",
              "src": "4432:60:40",
              "text": "@notice token address => total amount recovered to users"
            },
            "functionSelector": "bf799f2b",
            "mutability": "mutable",
            "name": "totalRecovered",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 33039,
              "keyType": {
                "id": 33037,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4505:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "4497:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 33038,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4516:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33044,
            "nodeType": "VariableDeclaration",
            "src": "4629:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$48_storage",
              "typeString": "uint256[48]"
            },
            "typeName": {
              "baseType": {
                "id": 33041,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4629:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 33043,
              "length": {
                "hexValue": "3438",
                "id": 33042,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4637:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_48_by_1",
                  "typeString": "int_const 48"
                },
                "value": "48"
              },
              "nodeType": "ArrayTypeName",
              "src": "4629:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$48_storage_ptr",
                "typeString": "uint256[48]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 33055,
            "nodeType": "EventDefinition",
            "src": "4913:139:40",
            "anonymous": false,
            "documentation": {
              "id": 33045,
              "nodeType": "StructuredDocumentation",
              "src": "4661:247:40",
              "text": " @notice A recovery event.\n @param id The tokenId recovering funds\n @param asset The asset being transferred\n @param recipient The user receiving the asset\n @param amount The amount transferred to the user"
            },
            "name": "Recovery",
            "parameters": {
              "id": 33054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33047,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4937:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4937:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33049,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4965:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33051,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4996:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33050,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4996:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33053,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "5031:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5031:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4927:124:40"
            }
          },
          {
            "id": 33071,
            "nodeType": "FunctionDefinition",
            "src": "5104:150:40",
            "body": {
              "id": 33070,
              "nodeType": "Block",
              "src": "5205:49:40",
              "statements": [
                {
                  "expression": {
                    "id": 33068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33066,
                      "name": "fundsRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33030,
                      "src": "5215:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 33067,
                      "name": "_fundsRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33060,
                      "src": "5232:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5215:32:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33069,
                  "nodeType": "ExpressionStatement",
                  "src": "5215:32:40"
                }
              ]
            },
            "documentation": {
              "id": 33056,
              "nodeType": "StructuredDocumentation",
              "src": "5058:41:40",
              "text": "============ Constructor ============"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 33063,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33058,
                    "src": "5186:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 33064,
                "modifierName": {
                  "id": 33062,
                  "name": "NFTAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33021,
                  "src": "5172:13:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NFTAccountant_$33021_$",
                    "typeString": "type(contract NFTAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5172:28:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 33061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33058,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 33071,
                  "src": "5116:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5116:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33060,
                  "mutability": "mutable",
                  "name": "_fundsRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33071,
                  "src": "5139:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5139:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5115:48:40"
            },
            "returnParameters": {
              "id": 33065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5205:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33110,
            "nodeType": "FunctionDefinition",
            "src": "5735:439:40",
            "body": {
              "id": 33109,
              "nodeType": "Block",
              "src": "5975:199:40",
              "statements": [
                {
                  "expression": {
                    "id": 33089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33085,
                      "name": "_totalAffected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33077,
                      "src": "5985:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33086,
                        "name": "totalAffected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32620,
                        "src": "6002:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33088,
                      "indexExpression": {
                        "id": 33087,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6016:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6002:21:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5985:38:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33090,
                  "nodeType": "ExpressionStatement",
                  "src": "5985:38:40"
                },
                {
                  "expression": {
                    "id": 33095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33091,
                      "name": "_totalMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33079,
                      "src": "6033:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33092,
                        "name": "totalMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32843,
                        "src": "6048:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33094,
                      "indexExpression": {
                        "id": 33093,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6060:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6048:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6033:34:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33096,
                  "nodeType": "ExpressionStatement",
                  "src": "6033:34:40"
                },
                {
                  "expression": {
                    "id": 33101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33097,
                      "name": "_totalCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33081,
                      "src": "6077:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33098,
                        "name": "totalCollected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33035,
                        "src": "6095:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33100,
                      "indexExpression": {
                        "id": 33099,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6110:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6095:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6077:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33102,
                  "nodeType": "ExpressionStatement",
                  "src": "6077:40:40"
                },
                {
                  "expression": {
                    "id": 33107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33103,
                      "name": "_totalRecovered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33083,
                      "src": "6127:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33104,
                        "name": "totalRecovered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33040,
                        "src": "6145:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33106,
                      "indexExpression": {
                        "id": 33105,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6160:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6145:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6127:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33108,
                  "nodeType": "ExpressionStatement",
                  "src": "6127:40:40"
                }
              ]
            },
            "documentation": {
              "id": 33072,
              "nodeType": "StructuredDocumentation",
              "src": "5260:470:40",
              "text": " @notice Return all pertinent state information for an asset in a single RPC call for convenience\n @return _totalAffected total amount of tokens affected\n @return _totalMinted total amount minted in NFTs from unbridging this\n         asset\n @return _totalCollected lifetime total amount of this asset that has\n         passed through the account\n @return _totalRecovered total amount of this asset recovered by users"
            },
            "functionSelector": "8b0dcb4e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assetInfo",
            "parameters": {
              "id": 33075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33074,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5754:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33073,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5754:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5753:16:40"
            },
            "returnParameters": {
              "id": 33084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33077,
                  "mutability": "mutable",
                  "name": "_totalAffected",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5830:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5830:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33079,
                  "mutability": "mutable",
                  "name": "_totalMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5866:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5866:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33081,
                  "mutability": "mutable",
                  "name": "_totalCollected",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5900:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5900:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33083,
                  "mutability": "mutable",
                  "name": "_totalRecovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5937:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5937:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5816:154:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33150,
            "nodeType": "FunctionDefinition",
            "src": "6279:314:40",
            "body": {
              "id": 33149,
              "nodeType": "Block",
              "src": "6347:246:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33124,
                        "name": "fundsRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33030,
                        "src": "6385:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33125,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33115,
                        "src": "6401:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33121,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33113,
                            "src": "6364:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33120,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "6357:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6357:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "6357:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 33126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:52:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33127,
                  "nodeType": "ExpressionStatement",
                  "src": "6357:52:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 33145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 33135,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6473:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                                    "typeString": "contract NFTRecoveryAccountant"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                                    "typeString": "contract NFTRecoveryAccountant"
                                  }
                                ],
                                "id": 33134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6465:7:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 33133,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6465:7:40",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 33136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6465:13:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 33130,
                                  "name": "_asset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 33113,
                                  "src": "6447:6:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 33129,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27517,
                                "src": "6440:6:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 33131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6440:14:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 33132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27456,
                            "src": "6440:24:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 33137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6440:39:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 33144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 33138,
                              "name": "totalCollected",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33035,
                              "src": "6499:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33140,
                            "indexExpression": {
                              "id": 33139,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33113,
                              "src": "6514:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6499:22:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 33141,
                              "name": "totalRecovered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33040,
                              "src": "6524:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33143,
                            "indexExpression": {
                              "id": 33142,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33113,
                              "src": "6539:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6524:22:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6499:47:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6440:106:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2172656d6f766520616d6f756e74",
                        "id": 33146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6560:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c81af08775acf6ac1b1fe680523b34d92c547561aa78734a592045d9d5a2561",
                          "typeString": "literal_string \"!remove amount\""
                        },
                        "value": "!remove amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c81af08775acf6ac1b1fe680523b34d92c547561aa78734a592045d9d5a2561",
                          "typeString": "literal_string \"!remove amount\""
                        }
                      ],
                      "id": 33128,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6419:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6419:167:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33148,
                  "nodeType": "ExpressionStatement",
                  "src": "6419:167:40"
                }
              ]
            },
            "documentation": {
              "id": 33111,
              "nodeType": "StructuredDocumentation",
              "src": "6180:94:40",
              "text": " @notice Remove funds that should not have been transferred to this contract"
            },
            "functionSelector": "abe7f1ab",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33118,
                "modifierName": {
                  "id": 33117,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "6337:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6337:9:40"
              }
            ],
            "name": "remove",
            "parameters": {
              "id": 33116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33113,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33150,
                  "src": "6295:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33112,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6295:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33115,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33150,
                  "src": "6311:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6311:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6294:33:40"
            },
            "returnParameters": {
              "id": 33119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6347:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33181,
            "nodeType": "FunctionDefinition",
            "src": "6955:334:40",
            "body": {
              "id": 33180,
              "nodeType": "Block",
              "src": "7072:217:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33166,
                        "name": "_handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33153,
                        "src": "7170:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 33169,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "7188:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                              "typeString": "contract NFTRecoveryAccountant"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                              "typeString": "contract NFTRecoveryAccountant"
                            }
                          ],
                          "id": 33168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7180:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 33167,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7180:7:40",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 33170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7180:13:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33171,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33157,
                        "src": "7195:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33163,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33155,
                            "src": "7145:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33162,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "7138:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7138:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27576,
                      "src": "7138:31:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 33172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7138:65:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33173,
                  "nodeType": "ExpressionStatement",
                  "src": "7138:65:40"
                },
                {
                  "expression": {
                    "id": 33178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 33174,
                        "name": "totalCollected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33035,
                        "src": "7249:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33176,
                      "indexExpression": {
                        "id": 33175,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33155,
                        "src": "7264:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7249:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 33177,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33157,
                      "src": "7275:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7249:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33179,
                  "nodeType": "ExpressionStatement",
                  "src": "7249:33:40"
                }
              ]
            },
            "documentation": {
              "id": 33151,
              "nodeType": "StructuredDocumentation",
              "src": "6599:351:40",
              "text": " @notice Collect funds to be recovered by users\n @param _handler address handling tokens\n @param _asset token to make available to recover\n @param _amount amount to make available to recover\n @dev Prior to the contract owner calling this method,\n the _handler must Approve this contract to spend _amount"
            },
            "functionSelector": "c8fea2fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33160,
                "modifierName": {
                  "id": 33159,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "7062:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7062:9:40"
              }
            ],
            "name": "collect",
            "parameters": {
              "id": 33158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33153,
                  "mutability": "mutable",
                  "name": "_handler",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "6981:16:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6981:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33155,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "7007:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7007:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33157,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "7031:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7031:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6971:81:40"
            },
            "returnParameters": {
              "id": 33161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7072:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33207,
            "nodeType": "FunctionDefinition",
            "src": "7410:214:40",
            "body": {
              "id": 33206,
              "nodeType": "Block",
              "src": "7474:150:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 33191,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33184,
                            "src": "7500:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 33190,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "7492:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 33192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7492:12:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e",
                        "id": 33193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7506:32:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b7c71d2114c5c2444107e37a623361679edc2674127329eae7e1482a865c6ecc",
                          "typeString": "literal_string \"recoverable: nonexistent token\""
                        },
                        "value": "recoverable: nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b7c71d2114c5c2444107e37a623361679edc2674127329eae7e1482a865c6ecc",
                          "typeString": "literal_string \"recoverable: nonexistent token\""
                        }
                      ],
                      "id": 33189,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7484:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7484:55:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33195,
                  "nodeType": "ExpressionStatement",
                  "src": "7484:55:40"
                },
                {
                  "assignments": [
                    33197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33197,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33206,
                      "src": "7549:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33196,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "7549:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33201,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33198,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "7570:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33200,
                    "indexExpression": {
                      "id": 33199,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33184,
                      "src": "7578:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7570:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:33:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33203,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33197,
                        "src": "7612:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      ],
                      "id": 33202,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33329,
                      "src": "7599:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Record_$32830_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct NFTAccountant.Record memory) view returns (uint256)"
                      }
                    },
                    "id": 33204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7599:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 33188,
                  "id": 33205,
                  "nodeType": "Return",
                  "src": "7592:25:40"
                }
              ]
            },
            "documentation": {
              "id": 33182,
              "nodeType": "StructuredDocumentation",
              "src": "7295:110:40",
              "text": " @notice The current total amount of funds that can be recovered by a\n         tokenId"
            },
            "functionSelector": "00c12c31",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recoverable",
            "parameters": {
              "id": 33185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33184,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33207,
                  "src": "7431:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7431:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7430:13:40"
            },
            "returnParameters": {
              "id": 33188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33187,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33207,
                  "src": "7465:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7465:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7464:9:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 33283,
            "nodeType": "FunctionDefinition",
            "src": "7689:725:40",
            "body": {
              "id": 33282,
              "nodeType": "Block",
              "src": "7729:685:40",
              "statements": [
                {
                  "assignments": [
                    33214
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33214,
                      "mutability": "mutable",
                      "name": "_user",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7739:13:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 33213,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7739:7:40",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33218,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 33216,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33210,
                        "src": "7763:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33215,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23850,
                      "src": "7755:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 33217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7755:12:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7739:28:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 33223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 33220,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33214,
                          "src": "7785:5:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 33221,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7794:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 33222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "7794:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7785:19:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f6e6c79204e465420686f6c6465722063616e207265636f766572",
                        "id": 33224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7806:29:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c27fed9b3e7ccd95fea5cbb11193a3c55d73886c9d1ae4eeb886a2bb349b4f01",
                          "typeString": "literal_string \"only NFT holder can recover\""
                        },
                        "value": "only NFT holder can recover"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c27fed9b3e7ccd95fea5cbb11193a3c55d73886c9d1ae4eeb886a2bb349b4f01",
                          "typeString": "literal_string \"only NFT holder can recover\""
                        }
                      ],
                      "id": 33219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7777:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7777:59:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33226,
                  "nodeType": "ExpressionStatement",
                  "src": "7777:59:40"
                },
                {
                  "assignments": [
                    33228
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33228,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7894:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33227,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "7894:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33232,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33229,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "7915:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33231,
                    "indexExpression": {
                      "id": 33230,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33210,
                      "src": "7923:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7915:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7894:33:40"
                },
                {
                  "assignments": [
                    33234
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33234,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7937:15:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 33233,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7937:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33238,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 33236,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33228,
                        "src": "7968:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      ],
                      "id": 33235,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33329,
                      "src": "7955:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Record_$32830_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct NFTAccountant.Record memory) view returns (uint256)"
                      }
                    },
                    "id": 33237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7955:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7937:36:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 33242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 33240,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33234,
                          "src": "7991:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 33241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8002:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7991:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "63757272656e746c792066756c6c79207265636f7665726564",
                        "id": 33243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8005:27:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b6d4979f599c1a8ea52a2c024b77add8160179d134a49973267d704910584a",
                          "typeString": "literal_string \"currently fully recovered\""
                        },
                        "value": "currently fully recovered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b6d4979f599c1a8ea52a2c024b77add8160179d134a49973267d704910584a",
                          "typeString": "literal_string \"currently fully recovered\""
                        }
                      ],
                      "id": 33239,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7983:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7983:50:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33245,
                  "nodeType": "ExpressionStatement",
                  "src": "7983:50:40"
                },
                {
                  "assignments": [
                    33247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33247,
                      "mutability": "mutable",
                      "name": "_asset",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "8121:14:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 33246,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8121:7:40",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33250,
                  "initialValue": {
                    "expression": {
                      "id": 33248,
                      "name": "_rec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33228,
                      "src": "8138:4:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record memory"
                      }
                    },
                    "id": 33249,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "asset",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 32823,
                    "src": "8138:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8121:27:40"
                },
                {
                  "expression": {
                    "id": 33255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 33251,
                        "name": "totalRecovered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33040,
                        "src": "8158:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33253,
                      "indexExpression": {
                        "id": 33252,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33247,
                        "src": "8173:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8158:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 33254,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33234,
                      "src": "8184:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8158:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33256,
                  "nodeType": "ExpressionStatement",
                  "src": "8158:33:40"
                },
                {
                  "expression": {
                    "id": 33265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 33257,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "8201:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 33259,
                        "indexExpression": {
                          "id": 33258,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33210,
                          "src": "8209:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8201:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 33260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "recovered",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32829,
                      "src": "8201:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33263,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33234,
                          "src": "8234:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8227:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint96_$",
                          "typeString": "type(uint96)"
                        },
                        "typeName": {
                          "id": 33261,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "8227:6:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33264,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8227:15:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "8201:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 33266,
                  "nodeType": "ExpressionStatement",
                  "src": "8201:41:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 33268,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33210,
                        "src": "8288:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 33269,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33247,
                        "src": "8293:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33270,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33214,
                        "src": "8301:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33271,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33234,
                        "src": "8308:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33267,
                      "name": "Recovery",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33055,
                      "src": "8279:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 33272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8279:37:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33273,
                  "nodeType": "EmitStatement",
                  "src": "8274:42:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33278,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33214,
                        "src": "8392:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33279,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33234,
                        "src": "8399:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33275,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33247,
                            "src": "8371:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33274,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "8364:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8364:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "8364:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 33280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8364:43:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33281,
                  "nodeType": "ExpressionStatement",
                  "src": "8364:43:40"
                }
              ]
            },
            "documentation": {
              "id": 33208,
              "nodeType": "StructuredDocumentation",
              "src": "7630:54:40",
              "text": " @notice Recover the available funds"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recover",
            "parameters": {
              "id": 33211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33210,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33283,
                  "src": "7707:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7707:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7706:13:40"
            },
            "returnParameters": {
              "id": 33212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7729:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33329,
            "nodeType": "FunctionDefinition",
            "src": "8511:460:40",
            "body": {
              "id": 33328,
              "nodeType": "Block",
              "src": "8585:386:40",
              "statements": [
                {
                  "assignments": [
                    33292
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33292,
                      "mutability": "mutable",
                      "name": "_totalRecoverable",
                      "nodeType": "VariableDeclaration",
                      "scope": 33328,
                      "src": "8595:25:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 33291,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8595:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33309,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 33302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 33293,
                              "name": "totalCollected",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33035,
                              "src": "8624:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33296,
                            "indexExpression": {
                              "expression": {
                                "id": 33294,
                                "name": "_rec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33286,
                                "src": "8639:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                                  "typeString": "struct NFTAccountant.Record memory"
                                }
                              },
                              "id": 33295,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "asset",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32823,
                              "src": "8639:10:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8624:26:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 33299,
                                  "name": "_rec",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 33286,
                                  "src": "8673:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                                    "typeString": "struct NFTAccountant.Record memory"
                                  }
                                },
                                "id": 33300,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 32825,
                                "src": "8673:11:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 33298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8665:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 33297,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "8665:7:40",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 33301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8665:20:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8624:61:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 33303,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8623:63:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 33304,
                        "name": "totalAffected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32620,
                        "src": "8689:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33307,
                      "indexExpression": {
                        "expression": {
                          "id": 33305,
                          "name": "_rec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33286,
                          "src": "8703:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                            "typeString": "struct NFTAccountant.Record memory"
                          }
                        },
                        "id": 33306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "asset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 32823,
                        "src": "8703:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8689:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8623:91:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8595:119:40"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33310,
                      "name": "_totalRecoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33292,
                      "src": "8777:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33313,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33286,
                            "src": "8805:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33314,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "8805:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8797:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8797:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8797:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8777:43:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33319,
                  "nodeType": "IfStatement",
                  "src": "8773:57:40",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 33317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8829:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 33290,
                    "id": 33318,
                    "nodeType": "Return",
                    "src": "8822:8:40"
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33320,
                      "name": "_totalRecoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33292,
                      "src": "8921:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33323,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33286,
                            "src": "8949:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33324,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "8949:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8941:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33321,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8941:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8941:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8921:43:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 33290,
                  "id": 33327,
                  "nodeType": "Return",
                  "src": "8914:50:40"
                }
              ]
            },
            "documentation": {
              "id": 33284,
              "nodeType": "StructuredDocumentation",
              "src": "8420:86:40",
              "text": " @notice The current total amount of funds recoverable for a tokenId"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recoverable",
            "parameters": {
              "id": 33287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33286,
                  "mutability": "mutable",
                  "name": "_rec",
                  "nodeType": "VariableDeclaration",
                  "scope": 33329,
                  "src": "8533:18:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                    "typeString": "struct NFTAccountant.Record"
                  },
                  "typeName": {
                    "id": 33285,
                    "name": "Record",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 32830,
                    "src": "8533:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                      "typeString": "struct NFTAccountant.Record"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8532:20:40"
            },
            "returnParameters": {
              "id": 33290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33289,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33329,
                  "src": "8576:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8576:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8575:9:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 33023,
              "name": "NFTAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33021,
              "src": "4112:13:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTAccountant_$33021",
                "typeString": "contract NFTAccountant"
              }
            },
            "id": 33024,
            "nodeType": "InheritanceSpecifier",
            "src": "4112:13:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33021,
          33635
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 33022,
          "nodeType": "StructuredDocumentation",
          "src": "4036:33:40",
          "text": "@title NFTRecoveryAccountant"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33330,
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "NFTRecoveryAccountant",
        "scope": 33523
      },
      {
        "id": 33522,
        "nodeType": "ContractDefinition",
        "src": "9014:2757:40",
        "nodes": [
          {
            "id": 33338,
            "nodeType": "VariableDeclaration",
            "src": "9132:41:40",
            "constant": false,
            "documentation": {
              "id": 33334,
              "nodeType": "StructuredDocumentation",
              "src": "9085:42:40",
              "text": "@notice Maps address to allowed status"
            },
            "functionSelector": "2848aeaf",
            "mutability": "mutable",
            "name": "allowList",
            "scope": 33522,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 33337,
              "keyType": {
                "id": 33335,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9140:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9132:24:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 33336,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "9151:4:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33342,
            "nodeType": "VariableDeclaration",
            "src": "9256:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33522,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 33339,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "9256:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 33341,
              "length": {
                "hexValue": "3439",
                "id": 33340,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "9264:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "9256:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 33354,
            "nodeType": "FunctionDefinition",
            "src": "9288:128:40",
            "body": {
              "id": 33353,
              "nodeType": "Block",
              "src": "9414:2:40",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 33349,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33344,
                    "src": "9378:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 33350,
                    "name": "_fundsRecipient",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33346,
                    "src": "9393:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 33351,
                "modifierName": {
                  "id": 33348,
                  "name": "NFTRecoveryAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33330,
                  "src": "9356:21:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NFTRecoveryAccountant_$33330_$",
                    "typeString": "type(contract NFTRecoveryAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9356:53:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 33347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33344,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 33354,
                  "src": "9300:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33343,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9300:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33346,
                  "mutability": "mutable",
                  "name": "_fundsRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33354,
                  "src": "9323:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9323:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9299:48:40"
            },
            "returnParameters": {
              "id": 33352,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9414:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 33367,
            "nodeType": "ModifierDefinition",
            "src": "9500:96:40",
            "body": {
              "id": 33366,
              "nodeType": "Block",
              "src": "9523:73:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 33358,
                          "name": "allowList",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33338,
                          "src": "9541:9:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 33361,
                        "indexExpression": {
                          "expression": {
                            "id": 33359,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "9551:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 33360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "9551:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9541:21:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420616c6c6f776564",
                        "id": 33362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9564:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c0608e7a428ea07a0c4c9bb0791749812cfeb8bc4b0e031d134a099a0e13dcb",
                          "typeString": "literal_string \"not allowed\""
                        },
                        "value": "not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c0608e7a428ea07a0c4c9bb0791749812cfeb8bc4b0e031d134a099a0e13dcb",
                          "typeString": "literal_string \"not allowed\""
                        }
                      ],
                      "id": 33357,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9533:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9533:45:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33364,
                  "nodeType": "ExpressionStatement",
                  "src": "9533:45:40"
                },
                {
                  "id": 33365,
                  "nodeType": "PlaceholderStatement",
                  "src": "9588:1:40"
                }
              ]
            },
            "documentation": {
              "id": 33355,
              "nodeType": "StructuredDocumentation",
              "src": "9422:73:40",
              "text": " @notice Requires that `msg.sender` is on the allowList"
            },
            "name": "onlyAllowed",
            "parameters": {
              "id": 33356,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9520:2:40"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33380,
            "nodeType": "FunctionDefinition",
            "src": "9669:81:40",
            "body": {
              "id": 33379,
              "nodeType": "Block",
              "src": "9720:30:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33376,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33370,
                        "src": "9739:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33375,
                      "name": "_recover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33283,
                      "src": "9730:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 33377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9730:13:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33378,
                  "nodeType": "ExpressionStatement",
                  "src": "9730:13:40"
                }
              ]
            },
            "documentation": {
              "id": 33368,
              "nodeType": "StructuredDocumentation",
              "src": "9602:62:40",
              "text": " @notice Recover available funds for the NFT"
            },
            "functionSelector": "0ca35682",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33373,
                "modifierName": {
                  "id": 33372,
                  "name": "onlyAllowed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33367,
                  "src": "9708:11:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9708:11:40"
              }
            ],
            "name": "recover",
            "parameters": {
              "id": 33371,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33370,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33380,
                  "src": "9686:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33369,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9686:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9685:13:40"
            },
            "returnParameters": {
              "id": 33374,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9720:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33411,
            "nodeType": "FunctionDefinition",
            "src": "9868:167:40",
            "body": {
              "id": 33410,
              "nodeType": "Block",
              "src": "9927:108:40",
              "statements": [
                {
                  "body": {
                    "id": 33408,
                    "nodeType": "Block",
                    "src": "9979:50:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 33406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 33400,
                              "name": "allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33338,
                              "src": "9993:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 33404,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 33401,
                                "name": "_who",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33384,
                                "src": "10003:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 33403,
                              "indexExpression": {
                                "id": 33402,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33390,
                                "src": "10008:1:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10003:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9993:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 33405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10014:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "9993:25:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 33407,
                        "nodeType": "ExpressionStatement",
                        "src": "9993:25:40"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33393,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33390,
                      "src": "9957:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 33394,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33384,
                        "src": "9961:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 33395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9961:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9957:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33409,
                  "initializationExpression": {
                    "assignments": [
                      33390
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 33390,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 33409,
                        "src": "9942:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9942:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 33392,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 33391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9954:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9942:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 33398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9974:3:40",
                      "subExpression": {
                        "id": 33397,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33390,
                        "src": "9974:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 33399,
                    "nodeType": "ExpressionStatement",
                    "src": "9974:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "9937:92:40"
                }
              ]
            },
            "documentation": {
              "id": 33381,
              "nodeType": "StructuredDocumentation",
              "src": "9756:107:40",
              "text": " @notice Adds addresses to the allow list\n @param _who A list of addresses to allow"
            },
            "functionSelector": "987c5ced",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33387,
                "modifierName": {
                  "id": 33386,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "9917:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9917:9:40"
              }
            ],
            "name": "allow",
            "parameters": {
              "id": 33385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33384,
                  "mutability": "mutable",
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 33411,
                  "src": "9883:23:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 33382,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9883:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 33383,
                    "nodeType": "ArrayTypeName",
                    "src": "9883:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9882:25:40"
            },
            "returnParameters": {
              "id": 33388,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9927:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33442,
            "nodeType": "FunctionDefinition",
            "src": "10161:171:40",
            "body": {
              "id": 33441,
              "nodeType": "Block",
              "src": "10223:109:40",
              "statements": [
                {
                  "body": {
                    "id": 33439,
                    "nodeType": "Block",
                    "src": "10275:51:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 33437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 33431,
                              "name": "allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33338,
                              "src": "10289:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 33435,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 33432,
                                "name": "_who",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33415,
                                "src": "10299:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 33434,
                              "indexExpression": {
                                "id": 33433,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33421,
                                "src": "10304:1:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10299:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10289:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 33436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10310:5:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "10289:26:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 33438,
                        "nodeType": "ExpressionStatement",
                        "src": "10289:26:40"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33424,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33421,
                      "src": "10253:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 33425,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33415,
                        "src": "10257:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 33426,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10257:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10253:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33440,
                  "initializationExpression": {
                    "assignments": [
                      33421
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 33421,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 33440,
                        "src": "10238:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33420,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10238:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 33423,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 33422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10250:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10238:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 33429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10270:3:40",
                      "subExpression": {
                        "id": 33428,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33421,
                        "src": "10270:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 33430,
                    "nodeType": "ExpressionStatement",
                    "src": "10270:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "10233:93:40"
                }
              ]
            },
            "documentation": {
              "id": 33412,
              "nodeType": "StructuredDocumentation",
              "src": "10041:115:40",
              "text": " @notice Removes addresses from the allow list\n @param _who A list of addresses to disallow"
            },
            "functionSelector": "ca091ef3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33418,
                "modifierName": {
                  "id": 33417,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "10213:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10213:9:40"
              }
            ],
            "name": "disallow",
            "parameters": {
              "id": 33416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33415,
                  "mutability": "mutable",
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 33442,
                  "src": "10179:23:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 33413,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10179:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 33414,
                    "nodeType": "ArrayTypeName",
                    "src": "10179:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10178:25:40"
            },
            "returnParameters": {
              "id": 33419,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10223:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33521,
            "nodeType": "FunctionDefinition",
            "src": "11065:704:40",
            "body": {
              "id": 33520,
              "nodeType": "Block",
              "src": "11409:360:40",
              "statements": [
                {
                  "expression": {
                    "id": 33468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33464,
                      "name": "_holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33448,
                      "src": "11419:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33466,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11437:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33465,
                        "name": "ownerOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23850,
                        "src": "11429:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) view returns (address)"
                        }
                      },
                      "id": 33467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11429:12:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11419:22:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33469,
                  "nodeType": "ExpressionStatement",
                  "src": "11419:22:40"
                },
                {
                  "expression": {
                    "id": 33474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33470,
                      "name": "_isAllowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33450,
                      "src": "11451:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33471,
                        "name": "allowList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33338,
                        "src": "11464:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 33473,
                      "indexExpression": {
                        "id": 33472,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33448,
                        "src": "11474:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11464:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11451:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33475,
                  "nodeType": "ExpressionStatement",
                  "src": "11451:31:40"
                },
                {
                  "expression": {
                    "id": 33480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33476,
                      "name": "_uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33452,
                      "src": "11492:4:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33478,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11508:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33477,
                        "name": "tokenURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23938,
                        "src": "11499:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                          "typeString": "function (uint256) view returns (string memory)"
                        }
                      },
                      "id": 33479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11499:13:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "11492:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 33481,
                  "nodeType": "ExpressionStatement",
                  "src": "11492:20:40"
                },
                {
                  "assignments": [
                    33483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33483,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33520,
                      "src": "11522:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33482,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "11522:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33487,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33484,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "11543:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33486,
                    "indexExpression": {
                      "id": 33485,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33445,
                      "src": "11551:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11543:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11522:33:40"
                },
                {
                  "expression": {
                    "id": 33491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33488,
                      "name": "_asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33454,
                      "src": "11565:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 33489,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33483,
                        "src": "11574:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      },
                      "id": 33490,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32823,
                      "src": "11574:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11565:19:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33492,
                  "nodeType": "ExpressionStatement",
                  "src": "11565:19:40"
                },
                {
                  "expression": {
                    "id": 33499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33493,
                      "name": "_originalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33456,
                      "src": "11594:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33496,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33483,
                            "src": "11620:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33497,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32825,
                          "src": "11620:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11612:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11612:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11612:20:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11594:38:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33500,
                  "nodeType": "ExpressionStatement",
                  "src": "11594:38:40"
                },
                {
                  "expression": {
                    "id": 33504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33501,
                      "name": "_originalUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33458,
                      "src": "11642:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 33502,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33483,
                        "src": "11658:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      },
                      "id": 33503,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "originalUser",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32827,
                      "src": "11658:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11642:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33505,
                  "nodeType": "ExpressionStatement",
                  "src": "11642:33:40"
                },
                {
                  "expression": {
                    "id": 33512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33506,
                      "name": "_recovered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33460,
                      "src": "11685:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33509,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33483,
                            "src": "11706:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33510,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "11706:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11698:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33507,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11698:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11698:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11685:36:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33513,
                  "nodeType": "ExpressionStatement",
                  "src": "11685:36:40"
                },
                {
                  "expression": {
                    "id": 33518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33514,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33462,
                      "src": "11731:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33516,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11758:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33515,
                        "name": "recoverable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33207,
                        "src": "11746:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 33517,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11746:16:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11731:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33519,
                  "nodeType": "ExpressionStatement",
                  "src": "11731:31:40"
                }
              ]
            },
            "documentation": {
              "id": 33443,
              "nodeType": "StructuredDocumentation",
              "src": "10338:722:40",
              "text": " @notice Return all pertinent state information for a tokenId in a single\n         RPC call for convenience\n @return _holder address of the current token holder\n @return _isAllowed TRUE if the current token holder is set on the\n         allowlist & can therefore call recovery\n @return _uri the tokenURI for the NFT\n @return _asset address of the ERC20 asset for this NFT\n @return _originalAmount amount of the bridge transfer which minted this\n         NFT\n @return _originalUser original recipient of the NFT\n @return _recovered total amount recovered thus far from this NFT\n @return _recoverable current amount recoverable for this NFT"
            },
            "functionSelector": "2e340599",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "info",
            "parameters": {
              "id": 33446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33445,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11079:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11079:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11078:13:40"
            },
            "returnParameters": {
              "id": 33463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33448,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11152:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11152:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33450,
                  "mutability": "mutable",
                  "name": "_isAllowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11181:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 33449,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11181:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33452,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11210:18:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 33451,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11210:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33454,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11242:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11242:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33456,
                  "mutability": "mutable",
                  "name": "_originalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11270:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11270:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33458,
                  "mutability": "mutable",
                  "name": "_originalUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11307:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11307:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33460,
                  "mutability": "mutable",
                  "name": "_recovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11342:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11342:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33462,
                  "mutability": "mutable",
                  "name": "_recoverable",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11374:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11374:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11138:266:40"
            },
            "scope": 33522,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 33332,
              "name": "NFTRecoveryAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33330,
              "src": "9057:21:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                "typeString": "contract NFTRecoveryAccountant"
              }
            },
            "id": 33333,
            "nodeType": "InheritanceSpecifier",
            "src": "9057:21:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33021,
          33330,
          33635
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 33331,
          "nodeType": "StructuredDocumentation",
          "src": "8975:39:40",
          "text": "@title AllowListRecoveryAccountant"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33522,
          33330,
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "AllowListNFTRecoveryAccountant",
        "scope": 33523
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 40
}