{
  "abi": [
    {
      "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": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "exists",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRegistry",
      "outputs": [
        {
          "internalType": "contract IChainRegistry",
          "name": "registry",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "implementsIChainNft",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "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": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setURI",
      "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": [
        {
          "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": [],
      "name": "totalMinted",
      "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": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "14": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/IERC20.sol",
    "15": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/extensions/IERC20Metadata.sol",
    "17": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC721/IERC721.sol",
    "20": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
    "29": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/utils/introspection/IERC165.sol",
    "34": "contracts/registry/IChainNft.sol",
    "36": "contracts/registry/IChainRegistry.sol",
    "39": "contracts/registry/IInstanceServiceFacade.sol",
    "43": "contracts/shared/IBaseTypes.sol",
    "44": "contracts/shared/IVersionType.sol",
    "47": "contracts/shared/UFixedMath.sol",
    "50": "contracts/staking/IStaking.sol"
  },
  "ast": {
    "absolutePath": "contracts/registry/IChainNft.sol",
    "exportedSymbols": {
      "IChainNft": [
        3494
      ],
      "IChainRegistry": [
        4025
      ],
      "IERC721Enumerable": [
        12485
      ],
      "NftId": [
        3353
      ],
      "eqNftId": [
        3380
      ],
      "gtz": [
        3418
      ],
      "neNftId": [
        3402
      ],
      "toNftId": [
        3447
      ],
      "zeroNftId": [
        3430
      ]
    },
    "id": 3495,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3347,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".19"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:24:34"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
        "file": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
        "id": 3349,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3495,
        "sourceUnit": 12486,
        "src": "65:104:34",
        "symbolAliases": [
          {
            "foreign": {
              "id": 3348,
              "name": "IERC721Enumerable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 12485,
              "src": "73:17:34",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/registry/IChainRegistry.sol",
        "file": "./IChainRegistry.sol",
        "id": 3351,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3495,
        "sourceUnit": 4026,
        "src": "171:52:34",
        "symbolAliases": [
          {
            "foreign": {
              "id": 3350,
              "name": "IChainRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 4025,
              "src": "179:14:34",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "canonicalName": "NftId",
        "id": 3353,
        "name": "NftId",
        "nameLocation": "230:5:34",
        "nodeType": "UserDefinedValueTypeDefinition",
        "src": "225:21:34",
        "underlyingType": {
          "id": 3352,
          "name": "uint96",
          "nodeType": "ElementaryTypeName",
          "src": "239:6:34",
          "typeDescriptions": {
            "typeIdentifier": "t_uint96",
            "typeString": "uint96"
          }
        }
      },
      {
        "functionList": [
          {
            "definition": {
              "id": 3354,
              "name": "eqNftId",
              "nameLocations": [
                "260:7:34"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3380,
              "src": "260:7:34"
            },
            "operator": "=="
          },
          {
            "definition": {
              "id": 3355,
              "name": "neNftId",
              "nameLocations": [
                "279:7:34"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3402,
              "src": "279:7:34"
            },
            "operator": "!="
          }
        ],
        "global": true,
        "id": 3358,
        "nodeType": "UsingForDirective",
        "src": "248:68:34",
        "typeName": {
          "id": 3357,
          "nodeType": "UserDefinedTypeName",
          "pathNode": {
            "id": 3356,
            "name": "NftId",
            "nameLocations": [
              "303:5:34"
            ],
            "nodeType": "IdentifierPath",
            "referencedDeclaration": 3353,
            "src": "303:5:34"
          },
          "referencedDeclaration": 3353,
          "src": "303:5:34",
          "typeDescriptions": {
            "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
            "typeString": "NftId"
          }
        }
      },
      {
        "body": {
          "id": 3379,
          "nodeType": "Block",
          "src": "379:46:34",
          "statements": [
            {
              "expression": {
                "commonType": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "id": 3377,
                "isConstant": false,
                "isLValue": false,
                "isPure": false,
                "lValueRequested": false,
                "leftExpression": {
                  "arguments": [
                    {
                      "id": 3371,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3361,
                      "src": "401:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    ],
                    "expression": {
                      "id": 3369,
                      "name": "NftId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3353,
                      "src": "388:5:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                        "typeString": "type(NftId)"
                      }
                    },
                    "id": 3370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "394:6:34",
                    "memberName": "unwrap",
                    "nodeType": "MemberAccess",
                    "src": "388:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_NftId_$3353_$returns$_t_uint96_$",
                      "typeString": "function (NftId) pure returns (uint96)"
                    }
                  },
                  "id": 3372,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": false,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "nameLocations": [],
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "388:15:34",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "nodeType": "BinaryOperation",
                "operator": "==",
                "rightExpression": {
                  "arguments": [
                    {
                      "id": 3375,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3364,
                      "src": "420:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    ],
                    "expression": {
                      "id": 3373,
                      "name": "NftId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3353,
                      "src": "407:5:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                        "typeString": "type(NftId)"
                      }
                    },
                    "id": 3374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "413:6:34",
                    "memberName": "unwrap",
                    "nodeType": "MemberAccess",
                    "src": "407:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_NftId_$3353_$returns$_t_uint96_$",
                      "typeString": "function (NftId) pure returns (uint96)"
                    }
                  },
                  "id": 3376,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": false,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "nameLocations": [],
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "407:15:34",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "src": "388:34:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              },
              "functionReturnParameters": 3368,
              "id": 3378,
              "nodeType": "Return",
              "src": "381:41:34"
            }
          ]
        },
        "id": 3380,
        "implemented": true,
        "kind": "freeFunction",
        "modifiers": [],
        "name": "eqNftId",
        "nameLocation": "327:7:34",
        "nodeType": "FunctionDefinition",
        "parameters": {
          "id": 3365,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3361,
              "mutability": "mutable",
              "name": "a",
              "nameLocation": "341:1:34",
              "nodeType": "VariableDeclaration",
              "scope": 3380,
              "src": "335:7:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3360,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3359,
                  "name": "NftId",
                  "nameLocations": [
                    "335:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "335:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "335:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            },
            {
              "constant": false,
              "id": 3364,
              "mutability": "mutable",
              "name": "b",
              "nameLocation": "350:1:34",
              "nodeType": "VariableDeclaration",
              "scope": 3380,
              "src": "344:7:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3363,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3362,
                  "name": "NftId",
                  "nameLocations": [
                    "344:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "344:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "344:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "334:18:34"
        },
        "returnParameters": {
          "id": 3368,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3367,
              "mutability": "mutable",
              "name": "isSame",
              "nameLocation": "371:6:34",
              "nodeType": "VariableDeclaration",
              "scope": 3380,
              "src": "366:11:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "typeName": {
                "id": 3366,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "366:4:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "365:13:34"
        },
        "scope": 3495,
        "src": "318:107:34",
        "stateMutability": "pure",
        "virtual": false,
        "visibility": "internal"
      },
      {
        "body": {
          "id": 3401,
          "nodeType": "Block",
          "src": "492:46:34",
          "statements": [
            {
              "expression": {
                "commonType": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "id": 3399,
                "isConstant": false,
                "isLValue": false,
                "isPure": false,
                "lValueRequested": false,
                "leftExpression": {
                  "arguments": [
                    {
                      "id": 3393,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3383,
                      "src": "514:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    ],
                    "expression": {
                      "id": 3391,
                      "name": "NftId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3353,
                      "src": "501:5:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                        "typeString": "type(NftId)"
                      }
                    },
                    "id": 3392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "507:6:34",
                    "memberName": "unwrap",
                    "nodeType": "MemberAccess",
                    "src": "501:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_NftId_$3353_$returns$_t_uint96_$",
                      "typeString": "function (NftId) pure returns (uint96)"
                    }
                  },
                  "id": 3394,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": false,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "nameLocations": [],
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "501:15:34",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "nodeType": "BinaryOperation",
                "operator": "!=",
                "rightExpression": {
                  "arguments": [
                    {
                      "id": 3397,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3386,
                      "src": "533:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    ],
                    "expression": {
                      "id": 3395,
                      "name": "NftId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3353,
                      "src": "520:5:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                        "typeString": "type(NftId)"
                      }
                    },
                    "id": 3396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "526:6:34",
                    "memberName": "unwrap",
                    "nodeType": "MemberAccess",
                    "src": "520:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_NftId_$3353_$returns$_t_uint96_$",
                      "typeString": "function (NftId) pure returns (uint96)"
                    }
                  },
                  "id": 3398,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": false,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "nameLocations": [],
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "520:15:34",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "src": "501:34:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              },
              "functionReturnParameters": 3390,
              "id": 3400,
              "nodeType": "Return",
              "src": "494:41:34"
            }
          ]
        },
        "id": 3402,
        "implemented": true,
        "kind": "freeFunction",
        "modifiers": [],
        "name": "neNftId",
        "nameLocation": "435:7:34",
        "nodeType": "FunctionDefinition",
        "parameters": {
          "id": 3387,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3383,
              "mutability": "mutable",
              "name": "a",
              "nameLocation": "449:1:34",
              "nodeType": "VariableDeclaration",
              "scope": 3402,
              "src": "443:7:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3382,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3381,
                  "name": "NftId",
                  "nameLocations": [
                    "443:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "443:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "443:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            },
            {
              "constant": false,
              "id": 3386,
              "mutability": "mutable",
              "name": "b",
              "nameLocation": "458:1:34",
              "nodeType": "VariableDeclaration",
              "scope": 3402,
              "src": "452:7:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3385,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3384,
                  "name": "NftId",
                  "nameLocations": [
                    "452:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "452:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "452:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "442:18:34"
        },
        "returnParameters": {
          "id": 3390,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3389,
              "mutability": "mutable",
              "name": "isDifferent",
              "nameLocation": "479:11:34",
              "nodeType": "VariableDeclaration",
              "scope": 3402,
              "src": "474:16:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "typeName": {
                "id": 3388,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "474:4:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "473:18:34"
        },
        "scope": 3495,
        "src": "426:112:34",
        "stateMutability": "pure",
        "virtual": false,
        "visibility": "internal"
      },
      {
        "body": {
          "id": 3417,
          "nodeType": "Block",
          "src": "580:31:34",
          "statements": [
            {
              "expression": {
                "commonType": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "id": 3415,
                "isConstant": false,
                "isLValue": false,
                "isPure": false,
                "lValueRequested": false,
                "leftExpression": {
                  "arguments": [
                    {
                      "id": 3412,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3405,
                      "src": "602:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                        "typeString": "NftId"
                      }
                    ],
                    "expression": {
                      "id": 3410,
                      "name": "NftId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3353,
                      "src": "589:5:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                        "typeString": "type(NftId)"
                      }
                    },
                    "id": 3411,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "595:6:34",
                    "memberName": "unwrap",
                    "nodeType": "MemberAccess",
                    "src": "589:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_NftId_$3353_$returns$_t_uint96_$",
                      "typeString": "function (NftId) pure returns (uint96)"
                    }
                  },
                  "id": 3413,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": false,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "nameLocations": [],
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "589:15:34",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "nodeType": "BinaryOperation",
                "operator": ">",
                "rightExpression": {
                  "hexValue": "30",
                  "id": 3414,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "607:1:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_0_by_1",
                    "typeString": "int_const 0"
                  },
                  "value": "0"
                },
                "src": "589:19:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              },
              "functionReturnParameters": 3409,
              "id": 3416,
              "nodeType": "Return",
              "src": "582:26:34"
            }
          ]
        },
        "id": 3418,
        "implemented": true,
        "kind": "freeFunction",
        "modifiers": [],
        "name": "gtz",
        "nameLocation": "548:3:34",
        "nodeType": "FunctionDefinition",
        "parameters": {
          "id": 3406,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3405,
              "mutability": "mutable",
              "name": "a",
              "nameLocation": "558:1:34",
              "nodeType": "VariableDeclaration",
              "scope": 3418,
              "src": "552:7:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3404,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3403,
                  "name": "NftId",
                  "nameLocations": [
                    "552:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "552:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "552:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "551:9:34"
        },
        "returnParameters": {
          "id": 3409,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3408,
              "mutability": "mutable",
              "name": "",
              "nameLocation": "-1:-1:-1",
              "nodeType": "VariableDeclaration",
              "scope": 3418,
              "src": "574:4:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "typeName": {
                "id": 3407,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "574:4:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "573:6:34"
        },
        "scope": 3495,
        "src": "539:72:34",
        "stateMutability": "pure",
        "virtual": false,
        "visibility": "internal"
      },
      {
        "body": {
          "id": 3429,
          "nodeType": "Block",
          "src": "653:25:34",
          "statements": [
            {
              "expression": {
                "arguments": [
                  {
                    "hexValue": "30",
                    "id": 3426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "673:1:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  }
                ],
                "expression": {
                  "argumentTypes": [
                    {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    }
                  ],
                  "expression": {
                    "id": 3424,
                    "name": "NftId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3353,
                    "src": "662:5:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                      "typeString": "type(NftId)"
                    }
                  },
                  "id": 3425,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "memberLocation": "668:4:34",
                  "memberName": "wrap",
                  "nodeType": "MemberAccess",
                  "src": "662:10:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_function_wrap_pure$_t_uint96_$returns$_t_userDefinedValueType$_NftId_$3353_$",
                    "typeString": "function (uint96) pure returns (NftId)"
                  }
                },
                "id": 3427,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "functionCall",
                "lValueRequested": false,
                "nameLocations": [],
                "names": [],
                "nodeType": "FunctionCall",
                "src": "662:13:34",
                "tryCall": false,
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "functionReturnParameters": 3423,
              "id": 3428,
              "nodeType": "Return",
              "src": "655:20:34"
            }
          ]
        },
        "id": 3430,
        "implemented": true,
        "kind": "freeFunction",
        "modifiers": [],
        "name": "zeroNftId",
        "nameLocation": "621:9:34",
        "nodeType": "FunctionDefinition",
        "parameters": {
          "id": 3419,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "630:2:34"
        },
        "returnParameters": {
          "id": 3423,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3422,
              "mutability": "mutable",
              "name": "",
              "nameLocation": "-1:-1:-1",
              "nodeType": "VariableDeclaration",
              "scope": 3430,
              "src": "646:5:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3421,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3420,
                  "name": "NftId",
                  "nameLocations": [
                    "646:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "646:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "646:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "645:7:34"
        },
        "scope": 3495,
        "src": "612:66:34",
        "stateMutability": "pure",
        "virtual": false,
        "visibility": "internal"
      },
      {
        "body": {
          "id": 3446,
          "nodeType": "Block",
          "src": "734:39:34",
          "statements": [
            {
              "expression": {
                "arguments": [
                  {
                    "arguments": [
                      {
                        "id": 3442,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3432,
                        "src": "761:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "754:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint96_$",
                        "typeString": "type(uint96)"
                      },
                      "typeName": {
                        "id": 3440,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "754:6:34",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 3443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "754:15:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  }
                ],
                "expression": {
                  "argumentTypes": [
                    {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  ],
                  "expression": {
                    "id": 3438,
                    "name": "NftId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3353,
                    "src": "743:5:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_userDefinedValueType$_NftId_$3353_$",
                      "typeString": "type(NftId)"
                    }
                  },
                  "id": 3439,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "memberLocation": "749:4:34",
                  "memberName": "wrap",
                  "nodeType": "MemberAccess",
                  "src": "743:10:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_function_wrap_pure$_t_uint96_$returns$_t_userDefinedValueType$_NftId_$3353_$",
                    "typeString": "function (uint96) pure returns (NftId)"
                  }
                },
                "id": 3444,
                "isConstant": false,
                "isLValue": false,
                "isPure": false,
                "kind": "functionCall",
                "lValueRequested": false,
                "nameLocations": [],
                "names": [],
                "nodeType": "FunctionCall",
                "src": "743:27:34",
                "tryCall": false,
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "functionReturnParameters": 3437,
              "id": 3445,
              "nodeType": "Return",
              "src": "736:34:34"
            }
          ]
        },
        "id": 3447,
        "implemented": true,
        "kind": "freeFunction",
        "modifiers": [],
        "name": "toNftId",
        "nameLocation": "689:7:34",
        "nodeType": "FunctionDefinition",
        "parameters": {
          "id": 3433,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3432,
              "mutability": "mutable",
              "name": "tokenId",
              "nameLocation": "705:7:34",
              "nodeType": "VariableDeclaration",
              "scope": 3447,
              "src": "697:15:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "typeName": {
                "id": 3431,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "697:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "696:17:34"
        },
        "returnParameters": {
          "id": 3437,
          "nodeType": "ParameterList",
          "parameters": [
            {
              "constant": false,
              "id": 3436,
              "mutability": "mutable",
              "name": "",
              "nameLocation": "-1:-1:-1",
              "nodeType": "VariableDeclaration",
              "scope": 3447,
              "src": "727:5:34",
              "stateVariable": false,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                "typeString": "NftId"
              },
              "typeName": {
                "id": 3435,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3434,
                  "name": "NftId",
                  "nameLocations": [
                    "727:5:34"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3353,
                  "src": "727:5:34"
                },
                "referencedDeclaration": 3353,
                "src": "727:5:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_NftId_$3353",
                  "typeString": "NftId"
                }
              },
              "visibility": "internal"
            }
          ],
          "src": "726:7:34"
        },
        "scope": 3495,
        "src": "680:93:34",
        "stateMutability": "pure",
        "virtual": false,
        "visibility": "internal"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3448,
              "name": "IERC721Enumerable",
              "nameLocations": [
                "803:17:34"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 12485,
              "src": "803:17:34"
            },
            "id": 3449,
            "nodeType": "InheritanceSpecifier",
            "src": "803:17:34"
          }
        ],
        "canonicalName": "IChainNft",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 3494,
        "linearizedBaseContracts": [
          3494,
          12485,
          16778,
          17712
        ],
        "name": "IChainNft",
        "nameLocation": "785:9:34",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "d0def521",
            "id": 3458,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nameLocation": "838:4:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3451,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "851:2:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3458,
                  "src": "843:10:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "843:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3453,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "869:3:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3458,
                  "src": "855:17:34",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3452,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "855:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "842:31:34"
            },
            "returnParameters": {
              "id": 3457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3456,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "899:7:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3458,
                  "src": "891:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "891:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "890:17:34"
            },
            "scope": 3494,
            "src": "829:79:34",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "42966c68",
            "id": 3463,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "burn",
            "nameLocation": "922:4:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3460,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "935:7:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3463,
                  "src": "927:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "927:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "926:17:34"
            },
            "returnParameters": {
              "id": 3462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "952:0:34"
            },
            "scope": 3494,
            "src": "913:40:34",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "862440e2",
            "id": 3470,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setURI",
            "nameLocation": "967:6:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3465,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "982:7:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3470,
                  "src": "974:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3464,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "974:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3467,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "1005:3:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3470,
                  "src": "991:17:34",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3466,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "991:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "973:36:34"
            },
            "returnParameters": {
              "id": 3469,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1018:0:34"
            },
            "scope": 3494,
            "src": "958:61:34",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "5ab1bd53",
            "id": 3476,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getRegistry",
            "nameLocation": "1034:11:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3471,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1045:2:34"
            },
            "returnParameters": {
              "id": 3475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3474,
                  "mutability": "mutable",
                  "name": "registry",
                  "nameLocation": "1085:8:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3476,
                  "src": "1070:23:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IChainRegistry_$4025",
                    "typeString": "contract IChainRegistry"
                  },
                  "typeName": {
                    "id": 3473,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3472,
                      "name": "IChainRegistry",
                      "nameLocations": [
                        "1070:14:34"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4025,
                      "src": "1070:14:34"
                    },
                    "referencedDeclaration": 4025,
                    "src": "1070:14:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IChainRegistry_$4025",
                      "typeString": "contract IChainRegistry"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1069:25:34"
            },
            "scope": 3494,
            "src": "1025:70:34",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "4f558e79",
            "id": 3483,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exists",
            "nameLocation": "1109:6:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3478,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1124:7:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 3483,
                  "src": "1116:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1116:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1115:17:34"
            },
            "returnParameters": {
              "id": 3482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3481,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3483,
                  "src": "1155:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3480,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1155:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1154:6:34"
            },
            "scope": 3494,
            "src": "1100:61:34",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "a2309ff8",
            "id": 3488,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "totalMinted",
            "nameLocation": "1175:11:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3484,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1186:2:34"
            },
            "returnParameters": {
              "id": 3487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3486,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3488,
                  "src": "1211:7:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3485,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1210:9:34"
            },
            "scope": 3494,
            "src": "1166:54:34",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "6701e871",
            "id": 3493,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "implementsIChainNft",
            "nameLocation": "1235:19:34",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3489,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1254:2:34"
            },
            "returnParameters": {
              "id": 3492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3491,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3493,
                  "src": "1280:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3490,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1280:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1279:6:34"
            },
            "scope": 3494,
            "src": "1226:60:34",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 3495,
        "src": "775:513:34",
        "usedErrors": []
      }
    ],
    "src": "39:1250:34"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.19+commit.7dd6d404"
  },
  "contractName": "IChainNft",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "IChainRegistry",
    "IComponent",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC165",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC20",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC20Metadata",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC721",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC721Enumerable",
    "IInstanceServiceFacade",
    "IStaking"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "events": {
      "Approval(address,address,uint256)": {
        "details": "Emitted when `owner` enables `approved` to manage the `tokenId` token."
      },
      "ApprovalForAll(address,address,bool)": {
        "details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
      },
      "Transfer(address,address,uint256)": {
        "details": "Emitted when `tokenId` token is transferred from `from` to `to`."
      }
    },
    "kind": "dev",
    "methods": {
      "approve(address,uint256)": {
        "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."
      },
      "balanceOf(address)": {
        "details": "Returns the number of tokens in ``owner``'s account."
      },
      "getApproved(uint256)": {
        "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."
      },
      "isApprovedForAll(address,address)": {
        "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"
      },
      "ownerOf(uint256)": {
        "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."
      },
      "safeTransferFrom(address,address,uint256)": {
        "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
      },
      "safeTransferFrom(address,address,uint256,bytes)": {
        "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
      },
      "setApprovalForAll(address,bool)": {
        "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event."
      },
      "supportsInterface(bytes4)": {
        "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
      },
      "tokenByIndex(uint256)": {
        "details": "Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens."
      },
      "tokenOfOwnerByIndex(address,uint256)": {
        "details": "Returns a token ID owned by `owner` at a given `index` of its token list. Use along with {balanceOf} to enumerate all of ``owner``'s tokens."
      },
      "totalSupply()": {
        "details": "Returns the total amount of tokens stored by the contract."
      },
      "transferFrom(address,address,uint256)": {
        "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."
      }
    },
    "version": 1
  },
  "offset": [
    775,
    1288
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "b2c9443793fed85869bf4c231ed507e2db04e2c3",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.19;\n\nimport {IERC721Enumerable} from \"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\";\n\nimport {IChainRegistry} from \"./IChainRegistry.sol\";\n\ntype NftId is uint96;\n\nusing {\n    eqNftId as ==,\n    neNftId as !=\n}\n    for NftId global;\n\nfunction eqNftId(NftId a, NftId b) pure returns(bool isSame) { return NftId.unwrap(a) == NftId.unwrap(b); }\nfunction neNftId(NftId a, NftId b) pure returns(bool isDifferent) { return NftId.unwrap(a) != NftId.unwrap(b); }\nfunction gtz(NftId a) pure returns(bool) { return NftId.unwrap(a) > 0; }\nfunction zeroNftId() pure returns(NftId) { return NftId.wrap(0); }\n\nfunction toNftId(uint256 tokenId) pure returns(NftId) { return NftId.wrap(uint96(tokenId)); }\n\ninterface IChainNft is \n    IERC721Enumerable \n{\n\n    function mint(address to, string memory uri) external returns(uint256 tokenId);\n    function burn(uint256 tokenId) external;\n    function setURI(uint256 tokenId, string memory uri) external;\n\n    function getRegistry() external view returns(IChainRegistry registry);\n    function exists(uint256 tokenId) external view returns(bool);\n    function totalMinted() external view returns(uint256);\n\n    function implementsIChainNft() external pure returns (bool);\n}\n",
  "sourceMap": "",
  "sourcePath": "contracts/registry/IChainNft.sol",
  "type": "interface"
}