From e046b4e3ac5d7b667ffe5a2765f5205238baa327 Mon Sep 17 00:00:00 2001 From: bastienrp Date: Fri, 18 Sep 2026 11:36:55 +0700 Subject: [PATCH 1/3] fix: add Tools and sdk --- bun.lock | 1535 +++++++++++++++++ docs/pages/en/explanation/build-overview.mdx | 2 +- docs/pages/en/explanation/gas-waiver.mdx | 12 + docs/pages/en/explanation/tools-overview.mdx | 39 + docs/pages/en/how-to/integrate-gas-waiver.mdx | 4 +- .../pages/en/how-to/relay-with-gas-waiver.mdx | 1 + .../en/how-to/self-hosted-gas-waiver.mdx | 4 + docs/pages/en/reference/gas-waiver-api.mdx | 9 +- .../en/reference/node-operations-overview.mdx | 6 +- docs/sidebar.json | 124 +- 10 files changed, 1671 insertions(+), 65 deletions(-) create mode 100644 bun.lock create mode 100644 docs/pages/en/explanation/tools-overview.mdx diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..9e733ac --- /dev/null +++ b/bun.lock @@ -0,0 +1,1535 @@ +{ + "lockfileVersion": 1, + "configVersion": 0, + "workspaces": { + "": { + "name": "stable-docs-vocs", + "dependencies": { + "lucide-react": "^0.468.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "vocs": "^1.0.16", + }, + "devDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "typescript": "^5.6.0", + }, + }, + }, + "packages": { + "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], + + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], + + "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], + + "@babel/generator": ["@babel/generator@7.29.7", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], + + "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], + + "@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="], + + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q=="], + + "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="], + + "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], + + "@babel/traverse": ["@babel/traverse@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="], + + "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], + + "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], + + "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + + "@clack/core": ["@clack/core@0.3.5", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ=="], + + "@clack/prompts": ["@clack/prompts@0.7.0", "", { "dependencies": { "@clack/core": "^0.3.3", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA=="], + + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + + "@emotion/hash": ["@emotion/hash@0.9.2", "", {}, "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], + + "@floating-ui/react": ["@floating-ui/react@0.27.19", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + + "@fortawesome/fontawesome-free": ["@fortawesome/fontawesome-free@6.7.2", "", {}, "sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA=="], + + "@hono/node-server": ["@hono/node-server@1.19.14", "", { "peerDependencies": { "hono": "^4" } }, "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="], + + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + + "@iconify/utils": ["@iconify/utils@3.1.3", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + + "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], + + "@mdx-js/rollup": ["@mdx-js/rollup@3.1.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", "source-map": "^0.7.0", "vfile": "^6.0.0" }, "peerDependencies": { "rollup": ">=2" } }, "sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw=="], + + "@mermaid-js/parser": ["@mermaid-js/parser@1.1.1", "", { "dependencies": { "@chevrotain/types": "~11.1.1" } }, "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@oxc-project/types": ["@oxc-project/types@0.133.0", "", {}, "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA=="], + + "@radix-ui/colors": ["@radix-ui/colors@3.0.0", "", {}, "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg=="], + + "@radix-ui/number": ["@radix-ui/number@1.1.2", "", {}, "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig=="], + + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], + + "@radix-ui/react-accessible-icon": ["@radix-ui/react-accessible-icon@1.1.9", "", { "dependencies": { "@radix-ui/react-visually-hidden": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-5W9KzJz/3DeYbGJHbZv8Q6AkxMOKUmALfc+PRg9dWwJZMk6zD37Sz8sZrF7UD6CBkiJvn7dNeRzn5G7XiCMyig=="], + + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collapsible": "1.1.13", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-xITxBB2p5m5tAe7M0F95kb4uAh7jSIKGlExMEm93HlW+XxZHV2eXFbPWLktd4JhRiwcnXNbO7iekcrbZy6ZCvA=="], + + "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dialog": "1.1.16", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-vPaIgo0mxYlvcFaM9jB2Uot9TjGXMuAPEvrc6BOLeV+I5U8s1dkIoouYaa6lmSfc5SPMo5x5djOTOTvaigdGMQ=="], + + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-yqHW5WQ/cTpU/un7dqqIKNy2iRU8BC0JB78PEzTfCCYvZu1U6W9KwObAniMk9nhSfyotKPQTYaUD/HB0f5muig=="], + + "@radix-ui/react-aspect-ratio": ["@radix-ui/react-aspect-ratio@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Xy+Dpxt/5n9rVTdPrNFmf8GwG1NlT1pzCF/z1MgOGZMLZWdWl+km+ZRWGQAPEhbkzSwYEsfYmTca8NhUtVxqnw=="], + + "@radix-ui/react-avatar": ["@radix-ui/react-avatar@1.1.12", "", { "dependencies": { "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-is-hydrated": "0.1.1", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-NQCQyWC7QrDPhjMn8hUqFeU0lUrprIgm1AyMgLbzuQJibNnatdc3SSMo3/UGFu/eUkJUU1cEcKCnyhXTQzq6tA=="], + + "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.4", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-m3JmIOAX5ZzZ6VPjxEU2dbTOhoHi0nT5riwcDwe8idocsWf4a5DXJLDtZ6LfJwMBx7W+A2b7kp2TgPEKtaiF6A=="], + + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-F0s8+p2XNpfc3k02zBfB0jPWbkHVG162+p7BdUMyJ2308QMqZ+oaclX+FAzKFovgL5OqRU+Rvy6f/vbdlJVaqA=="], + + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.9", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zuSVi7ziP7uQRqc+yGxsKJfNkdyHv3ZKDaHe0gzg4dRgws96TPKWIiz84tVHP4GEcEl8bC0mdt17NkcxaJHmaQ=="], + + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], + + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], + + "@radix-ui/react-context-menu": ["@radix-ui/react-context-menu@2.3.0", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-menu": "2.1.17", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-d7CouXhAW+CGmFOqmB+IEvd3E9GcaqfgvfjCc3hfulp2pkaUCEVEGa0SN5nNWYA+IvQ6g1Pt+S5dpNn1AoY9hg=="], + + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.9", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-l9ok83YBclEZhbjgzt76Hw733e6cvRKPNgO6GJ/IETlufXG9p+fRu2wlvpImQvR6xdJ8h7J8J2DBvsPEiEsKMw=="], + + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA=="], + + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-escape-keydown": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-MhoruH6xEzsbvOmo4TNgMfmtvRGyDZw4MDSdf4ybMHfezjqwzv6hyd4lsMzBp8K9Sn6sGzCF62x1I7BYUECXOg=="], + + "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.17", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-menu": "2.1.17", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-S6b3Jm57sY5EdDyOMLkacbB0qMnKhy1RCKZCt795ZkmtUOAvojYIZ5p7dXHIh5Cyr3jCLLI5/g64V3FKLudZmw=="], + + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q=="], + + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.9", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-9Se8t+Zry+1rEOL7Y6l/4ANYU/TOtAtf8O2fKdwLltcaMcm6kOqYGbzO4tMFQ0bvzO920pRAoHpFZ4W85S3keQ=="], + + "@radix-ui/react-form": ["@radix-ui/react-form@0.1.9", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-label": "2.1.9", "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-eTPyThIKDacJ3mJDvYwf/PSmsEYlOyA2Qcb+aGyWwYv+P5w57VPUkMVA2XJ9z0Du2KBY1HoHQzhPV9iYL/r4hg=="], + + "@radix-ui/react-hover-card": ["@radix-ui/react-hover-card@1.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-hAileDBtd6CX7nlZOarOnISQ6PP4q0e16BX51ulzdZ+7IzjL0sDTVpFdmSYrIjw6zVNsfQBao5gG6AWr3qwfvA=="], + + "@radix-ui/react-icons": ["@radix-ui/react-icons@1.3.2", "", { "peerDependencies": { "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" } }, "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g=="], + + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], + + "@radix-ui/react-label": ["@radix-ui/react-label@2.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-rDoTeMbCwRVcnmo7NGT9IlPo1yXmEI+xc1URP3oeewwZEV4mdTp1dYUhYbQdo4D1q2SjKVvv4N1gNY77QAQtjA=="], + + "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.17", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.9", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-use-callback-ref": "1.1.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-fmbNnFyf+JYCN0DhhWnEdUTDnZD1mXaPQWivdsPIb8oOSbARfD3LIQJbLCG8a8QLCwoMxiJ7GVPIFcC8Dw8v2Q=="], + + "@radix-ui/react-menubar": ["@radix-ui/react-menubar@1.1.17", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-menu": "2.1.17", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-AKtZ4O782yO7qwIyq73WpulYt1IHhQ0htDb6wNcxzxnSDCcSWMVBiU9ycpcA90XzQO4IVIxIErtak6Kg/Vt0rQ=="], + + "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-visually-hidden": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-/fS8hKCcRt4DwCGa5QIB3juRXmfYSOk4a2AEe/BDIyy7Hm+eje2Y13oUx5zejl+wFt1owrM7E8NWlbaEl5EGpg=="], + + "@radix-ui/react-one-time-password-field": ["@radix-ui/react-one-time-password-field@0.1.9", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-is-hydrated": "0.1.1", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-fvCzA9hm7yN5xxTPJIi4VhSmH5gv+76ILsxguBK3cm3icD5BR4vW7POQmu8Zio0yh91uuouG/Kang40IbMkaSQ=="], + + "@radix-ui/react-password-toggle-field": ["@radix-ui/react-password-toggle-field@0.1.4", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-is-hydrated": "0.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qoDSkObZ9faJlsjlwyBH6ia7kq9vaJ2QwWTowT3nQpzPvUTAKesmWuGJYpd91HIoJqS+5ZPXy5uFPp+HlwdaAg=="], + + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.9", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-8brVpAU5Uq7Bh0c8EFc4ZTf2JJTYn0o+1L+CUJB3UYIOkTjKGMgoHvduylrahdmNlr3DfH0rFq2DrbNZXgaspw=="], + + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.3.0", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-rect": "1.1.2", "@radix-ui/react-use-size": "1.1.2", "@radix-ui/rect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-9PB589e1aWZbrlFUHdz6WiPCL+xLZHQFX7oibqG/6Q0SwOkxDyQX9W/cyPa+sAPPKuC8cpLCpRczE5a/1DiwVQ=="], + + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.11", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-UEytdjgEh2tJGgD/gZK4FUx6t1rNIlM3U0DENhSrG7I75FGm1DnaDuVUWF1pWAWUwGmn1sCJ1VGHn8LhN1aTOw=="], + + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.6", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.5", "", { "dependencies": { "@radix-ui/react-slot": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zifXeB8Y88qCYx8PLZ5oQb32KwZub+s925mMoZsBBq9KUQqWKkREubTfs6ASjRPPBe7Jt9O8OHH89+95VG+grA=="], + + "@radix-ui/react-progress": ["@radix-ui/react-progress@1.1.9", "", { "dependencies": { "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-+EOkvg1Zn1vI1+fRDfRSAiJ7BWfcDAo5ASMmbqrcLZ4s4USk2FGkoHgeb2X+CkUgo2zJMiyObwf1k44CrRWsyw=="], + + "@radix-ui/react-radio-group": ["@radix-ui/react-radio-group@1.4.0", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-eHdV5bLx9sH+tBnbDjkIBdvQEH/c6MEtQYhTbxkaDK9qsIFFLtmJYEQFVdwhnruWotLfQmIuWEL/J+L3utE8rQ=="], + + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-FvgPt1bRmg8Xt2QpF7NUZW3dE0ZQHGm41dAdgT2J2GJPoIXz+9Em3NobAxf4fupcxhgHu03E5CRiU2MWvObXyg=="], + + "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.11", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-DS39ziOgea75U/TrXKU2/oKp0be2jrDHnzFLvahg/0iNAT1Zq16e4Uw0WXwyXvsK+mG3BRyMb7A3NRZMDuEXtQ=="], + + "@radix-ui/react-select": ["@radix-ui/react-select@2.3.0", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.9", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-visually-hidden": "1.2.5", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-mENc7WpJvJcW8hlMpzfFcHcEhTvYS5JMBmi9HVC1Q00uhBwML086MHYUV8QQdQv6lcu0Wg8dzd1RB8AFADcG/g=="], + + "@radix-ui/react-separator": ["@radix-ui/react-separator@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-gvgW+JV/Mbjj6darztTetnmElpQEzZrXpJvfj+dOxNAxiyHEAyUvEjjl4zxblvmjmKmi3jfPoy7ZdxzCuUBJSA=="], + + "@radix-ui/react-slider": ["@radix-ui/react-slider@1.4.0", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-RHcPlLOThRJM51DSIC33ZnpDEBYhyEFroVWkd2P54PGGjkmAt14RboYUU9E1MFst666zFHM0tGtWvMjSOtU1pw=="], + + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-rCMO3QsIVKv5JTY5CVbo2MvO77SpEqqYc8AvRE7OWqRDOIqAKjsp+DrmnY9uc8NPdxB5E2z47HTYGeE2+NTptg=="], + + "@radix-ui/react-switch": ["@radix-ui/react-switch@1.3.0", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-GP1EZwhoZO/GGnhM1P5/2Vpm8iN8EnngyU0oezn2l78kN8tj25pyrvjIaT7azBhK615KSt+P2w39y57YV5jVkA=="], + + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-D5jwp9JNuwDeCw3CYD2Fz+sSHo0droQjC8u75dJHe4aWr5q6yBiXZU+hurXnKudRgEpUkD5TsI6bjHPo5ThUxA=="], + + "@radix-ui/react-toast": ["@radix-ui/react-toast@1.2.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-visually-hidden": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-WUymDDiN2DpoGudRN1aW4wF5O3BNQjZZO/5nngPoNiEVqjyOzirvZZNO0R6dC1ifucSINVaSv8JX1aq47VGgiA=="], + + "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-FikrKJemoBGZQ6uRID0HJqSPBP6D7OppdD2OhLl0ZYLlAyPXI7MezoYGmumwNkrAoRm35xXkb4C8JPfJZZzcaw=="], + + "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-toggle": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-TEgECgJaWGAHJJZGzNNEYTNBdIXqX7LchANycpyP7DkfjmuiSN7ISt1k/ZRGVJgVJonsgP4vwaiKMn5utrcwWQ=="], + + "@radix-ui/react-toolbar": ["@radix-ui/react-toolbar@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-separator": "1.1.9", "@radix-ui/react-toggle-group": "1.1.12" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-4wHtJVdIgqMmEwUvxA0BYg/2JMRbt0L3+8UD8Ml/nhKkfXtiZcM8u/S15gQ5xj9YEd/0qlrm5bE805LsjQ+J8A=="], + + "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.9", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-visually-hidden": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-u6F9MmTtBSLkiXNVDrtB/yPCZarM9smNswC24YYLV/M+bth6J3Gs3vlJezEoFwKZvPvxhCpUYdUnOsNG/0XOlA=="], + + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw=="], + + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], + + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.2", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-2uVLvLjgO7NZCWw01/FdqRwmA42J0BcjPMUCA+koFEOAb+zjqIP7SiFz/7zWPrKnVmSqr76Omq2ALyCuX4dhLw=="], + + "@radix-ui/react-use-is-hydrated": ["@radix-ui/react-use-is-hydrated@0.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A=="], + + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA=="], + + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw=="], + + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.2", "", { "dependencies": { "@radix-ui/rect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw=="], + + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w=="], + + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.5", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-tPcHNI3FajdDBFpl/Ez1m2WL0ufJqBKyHxMDBvKitopamK36WwBGOMicuMEZKkM5Wce41QxUyv6BsiqfrWBiGg=="], + + "@radix-ui/rect": ["@radix-ui/rect@1.1.2", "", {}, "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.3", "", { "os": "android", "cpu": "arm64" }, "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.3", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.3", "", {}, "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.4.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" } }, "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.61.1", "", { "os": "android", "cpu": "arm" }, "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.61.1", "", { "os": "android", "cpu": "arm64" }, "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.61.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.61.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.61.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.61.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.61.1", "", { "os": "linux", "cpu": "arm" }, "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.61.1", "", { "os": "linux", "cpu": "arm" }, "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.61.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.61.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.61.1", "", { "os": "linux", "cpu": "none" }, "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.61.1", "", { "os": "linux", "cpu": "none" }, "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.61.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.61.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.61.1", "", { "os": "linux", "cpu": "none" }, "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.61.1", "", { "os": "linux", "cpu": "none" }, "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.61.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.61.1", "", { "os": "linux", "cpu": "x64" }, "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.61.1", "", { "os": "linux", "cpu": "x64" }, "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.61.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.61.1", "", { "os": "none", "cpu": "arm64" }, "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.61.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.61.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.61.1", "", { "os": "win32", "cpu": "x64" }, "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.61.1", "", { "os": "win32", "cpu": "x64" }, "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw=="], + + "@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], + + "@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], + + "@shikijs/rehype": ["@shikijs/rehype@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@types/hast": "^3.0.4", "hast-util-to-string": "^3.0.1", "shiki": "1.29.2", "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "sha512-sxi53HZe5XDz0s2UqF+BVN/kgHPMS9l6dcacM4Ra3ZDzCJa5rDGJ+Ukpk4LxdD1+MITBM6hoLbPfGv9StV8a5Q=="], + + "@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], + + "@shikijs/transformers": ["@shikijs/transformers@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/types": "1.29.2" } }, "sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA=="], + + "@shikijs/twoslash": ["@shikijs/twoslash@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/types": "1.29.2", "twoslash": "^0.2.12" } }, "sha512-2S04ppAEa477tiaLfGEn1QJWbZUmbk8UoPbAEw4PifsrxkBXtAtOflIZJNtuCwz8ptc/TPxy7CO7gW4Uoi6o/g=="], + + "@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.1.15", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.0", "lightningcss": "1.30.2", "magic-string": "^0.30.19", "source-map-js": "^1.2.1", "tailwindcss": "4.1.15" } }, "sha512-HF4+7QxATZWY3Jr8OlZrBSXmwT3Watj0OogeDvdUY/ByXJHQ+LBtqA2brDb3sBxYslIFx6UP94BJ4X6a4L9Bmw=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.15", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.15", "@tailwindcss/oxide-darwin-arm64": "4.1.15", "@tailwindcss/oxide-darwin-x64": "4.1.15", "@tailwindcss/oxide-freebsd-x64": "4.1.15", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.15", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.15", "@tailwindcss/oxide-linux-arm64-musl": "4.1.15", "@tailwindcss/oxide-linux-x64-gnu": "4.1.15", "@tailwindcss/oxide-linux-x64-musl": "4.1.15", "@tailwindcss/oxide-wasm32-wasi": "4.1.15", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.15", "@tailwindcss/oxide-win32-x64-msvc": "4.1.15" } }, "sha512-krhX+UOOgnsUuks2SR7hFafXmLQrKxB4YyRTERuCE59JlYL+FawgaAlSkOYmDRJdf1Q+IFNDMl9iRnBW7QBDfQ=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.15", "", { "os": "android", "cpu": "arm64" }, "sha512-TkUkUgAw8At4cBjCeVCRMc/guVLKOU1D+sBPrHt5uVcGhlbVKxrCaCW9OKUIBv1oWkjh4GbunD/u/Mf0ql6kEA=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-xt5XEJpn2piMSfvd1UFN6jrWXyaKCwikP4Pidcf+yfHTSzSpYhG3dcMktjNkQO3JiLCp+0bG0HoWGvz97K162w=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-TnWaxP6Bx2CojZEXAV2M01Yl13nYPpp0EtGpUrY+LMciKfIXiLL2r/SiSRpagE5Fp2gX+rflp/Os1VJDAyqymg=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.15", "", { "os": "freebsd", "cpu": "x64" }, "sha512-quISQDWqiB6Cqhjc3iWptXVZHNVENsWoI77L1qgGEHNIdLDLFnw3/AfY7DidAiiCIkGX/MjIdB3bbBZR/G2aJg=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15", "", { "os": "linux", "cpu": "arm" }, "sha512-ObG76+vPlab65xzVUQbExmDU9FIeYLQ5k2LrQdR2Ud6hboR+ZobXpDoKEYXf/uOezOfIYmy2Ta3w0ejkTg9yxg=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-4WbBacRmk43pkb8/xts3wnOZMDKsPFyEH/oisCm2q3aLZND25ufvJKcDUpAu0cS+CBOL05dYa8D4U5OWECuH/Q=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-AbvmEiteEj1nf42nE8skdHv73NoR+EwXVSgPY6l39X12Ex8pzOwwfi3Kc8GAmjsnsaDEbk+aj9NyL3UeyHcTLg=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.15", "", { "os": "linux", "cpu": "x64" }, "sha512-+rzMVlvVgrXtFiS+ES78yWgKqpThgV19ISKD58Ck+YO5pO5KjyxLt7AWKsWMbY0R9yBDC82w6QVGz837AKQcHg=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.15", "", { "os": "linux", "cpu": "x64" }, "sha512-fPdEy7a8eQN9qOIK3Em9D3TO1z41JScJn8yxl/76mp4sAXFDfV4YXxsiptJcOwy6bGR+70ZSwFIZhTXzQeqwQg=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.15", "", { "cpu": "none" }, "sha512-sJ4yd6iXXdlgIMfIBXuVGp/NvmviEoMVWMOAGxtxhzLPp9LOj5k0pMEMZdjeMCl4C6Up+RM8T3Zgk+BMQ0bGcQ=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-sJGE5faXnNQ1iXeqmRin7Ds/ru2fgCiaQZQQz3ZGIDtvbkeV85rAZ0QJFMDg0FrqsffZG96H1U9AQlNBRLsHVg=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.15", "", { "os": "win32", "cpu": "x64" }, "sha512-NLeHE7jUV6HcFKS504bpOohyi01zPXi2PXmjFfkzTph8xRxDdxkRsXm/xDO5uV5K3brrE1cCwbUYmFUSHR3u1w=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.15", "", { "dependencies": { "@tailwindcss/node": "4.1.15", "@tailwindcss/oxide": "4.1.15", "tailwindcss": "4.1.15" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-B6s60MZRTUil+xKoZoGe6i0Iar5VuW+pmcGlda2FX+guDuQ1G1sjiIy1W0frneVpeL/ZjZ4KEgWZHNrIm++2qA=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/d3": ["@types/d3@7.4.3", "", { "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", "@types/d3-brush": "*", "@types/d3-chord": "*", "@types/d3-color": "*", "@types/d3-contour": "*", "@types/d3-delaunay": "*", "@types/d3-dispatch": "*", "@types/d3-drag": "*", "@types/d3-dsv": "*", "@types/d3-ease": "*", "@types/d3-fetch": "*", "@types/d3-force": "*", "@types/d3-format": "*", "@types/d3-geo": "*", "@types/d3-hierarchy": "*", "@types/d3-interpolate": "*", "@types/d3-path": "*", "@types/d3-polygon": "*", "@types/d3-quadtree": "*", "@types/d3-random": "*", "@types/d3-scale": "*", "@types/d3-scale-chromatic": "*", "@types/d3-selection": "*", "@types/d3-shape": "*", "@types/d3-time": "*", "@types/d3-time-format": "*", "@types/d3-timer": "*", "@types/d3-transition": "*", "@types/d3-zoom": "*" } }, "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww=="], + + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], + + "@types/d3-axis": ["@types/d3-axis@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw=="], + + "@types/d3-brush": ["@types/d3-brush@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A=="], + + "@types/d3-chord": ["@types/d3-chord@3.0.6", "", {}, "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="], + + "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], + + "@types/d3-contour": ["@types/d3-contour@3.0.6", "", { "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" } }, "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg=="], + + "@types/d3-delaunay": ["@types/d3-delaunay@6.0.4", "", {}, "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="], + + "@types/d3-dispatch": ["@types/d3-dispatch@3.0.7", "", {}, "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA=="], + + "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="], + + "@types/d3-dsv": ["@types/d3-dsv@3.0.7", "", {}, "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="], + + "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], + + "@types/d3-fetch": ["@types/d3-fetch@3.0.7", "", { "dependencies": { "@types/d3-dsv": "*" } }, "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA=="], + + "@types/d3-force": ["@types/d3-force@3.0.10", "", {}, "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="], + + "@types/d3-format": ["@types/d3-format@3.0.4", "", {}, "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="], + + "@types/d3-geo": ["@types/d3-geo@3.1.0", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ=="], + + "@types/d3-hierarchy": ["@types/d3-hierarchy@3.1.7", "", {}, "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="], + + "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], + + "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="], + + "@types/d3-polygon": ["@types/d3-polygon@3.0.2", "", {}, "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="], + + "@types/d3-quadtree": ["@types/d3-quadtree@3.0.6", "", {}, "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="], + + "@types/d3-random": ["@types/d3-random@3.0.3", "", {}, "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ=="], + + "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], + + "@types/d3-scale-chromatic": ["@types/d3-scale-chromatic@3.1.0", "", {}, "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ=="], + + "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="], + + "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="], + + "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], + + "@types/d3-time-format": ["@types/d3-time-format@4.0.3", "", {}, "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="], + + "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], + + "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="], + + "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], + + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], + + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/mdx": ["@types/mdx@2.0.14", "", {}, "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + + "@types/node": ["@types/node@25.9.2", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw=="], + + "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], + + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "@typescript/vfs": ["@typescript/vfs@1.6.4", "", { "dependencies": { "debug": "^4.4.3" }, "peerDependencies": { "typescript": "*" } }, "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="], + + "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], + + "@vanilla-extract/babel-plugin-debug-ids": ["@vanilla-extract/babel-plugin-debug-ids@1.2.2", "", { "dependencies": { "@babel/core": "^7.23.9" } }, "sha512-MeDWGICAF9zA/OZLOKwhoRlsUW+fiMwnfuOAqFVohL31Agj7Q/RBWAYweqjHLgFBCsdnr6XIfwjJnmb2znEWxw=="], + + "@vanilla-extract/compiler": ["@vanilla-extract/compiler@0.7.0", "", { "dependencies": { "@vanilla-extract/css": "^1.20.1", "@vanilla-extract/integration": "^8.0.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vite-node": "^3.2.2 || ^5.0.0 || ^6.0.0" } }, "sha512-rZQ40HVmsxfGLjoflwwsaUBLfpbpKDoZC19oiDA0FHq4LdrYtyVbFkc0MfqkNo/qBCvaZfsRezCqk0QQxCqZ8w=="], + + "@vanilla-extract/css": ["@vanilla-extract/css@1.20.1", "", { "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.9", "css-what": "^6.1.0", "csstype": "^3.2.3", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "sha512-5I9RNo5uZW9tsBnqrWzJqELegOqTHBrZyDFnES0gR9gJJHBB9dom1N0bwITM9tKwBcfKrTX4a6DHVeQdJ2ubQA=="], + + "@vanilla-extract/dynamic": ["@vanilla-extract/dynamic@2.1.5", "", { "dependencies": { "@vanilla-extract/private": "^1.0.9" } }, "sha512-QGIFGb1qyXQkbzx6X6i3+3LMc/iv/ZMBttMBL+Wm/DetQd36KsKsFg5CtH3qy+1hCA/5w93mEIIAiL4fkM8ycw=="], + + "@vanilla-extract/integration": ["@vanilla-extract/integration@8.0.10", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/plugin-syntax-typescript": "^7.23.3", "@vanilla-extract/babel-plugin-debug-ids": "^1.2.2", "@vanilla-extract/css": "^1.20.1", "dedent": "^1.5.3", "esbuild": "npm:esbuild@>=0.17.6 <0.29.0", "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "mlly": "^1.4.2" } }, "sha512-01IB5gbrgTe8IIrtfRXXTmACl5D8Enzqp2cKbCWaMKXmnoilXXVCPbJoA96q88PXkNDXsXepCxUugMvEmL3c7A=="], + + "@vanilla-extract/private": ["@vanilla-extract/private@1.0.9", "", {}, "sha512-gT2jbfZuaaCLrAxwXbRgIhGhcXbRZCG3v4TTUnjw0EJ7ArdBRxkq4msNJkbuRkCgfIK5ATmprB5t9ljvLeFDEA=="], + + "@vanilla-extract/vite-plugin": ["@vanilla-extract/vite-plugin@5.2.2", "", { "dependencies": { "@vanilla-extract/compiler": "^0.7.0", "@vanilla-extract/integration": "^8.0.9" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-AUyB4fDR2b/Mo0lcXhhlf6RxnDPYwFMyKKopalJ4BwQNKYzZSoTwHJ1PLPO9SKhpz7lzXc0Z18GHQZOewzl3YA=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="], + + "acorn": ["acorn@8.16.0", "", { "bin": "bin/acorn" }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + + "astring": ["astring@1.9.0", "", { "bin": "bin/astring" }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], + + "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": "bin/autoprefixer" }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="], + + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.35", "", { "bin": "dist/cli.cjs" }, "sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg=="], + + "bcp-47-match": ["bcp-47-match@2.0.3", "", {}, "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ=="], + + "bl": ["bl@5.1.0", "", { "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": "cli.js" }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001797", "", {}, "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + + "chroma-js": ["chroma-js@3.2.0", "", {}, "sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw=="], + + "cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], + + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + + "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], + + "compression": ["compression@1.8.1", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w=="], + + "confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + + "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], + + "create-vocs": ["create-vocs@1.0.0", "", { "dependencies": { "@clack/prompts": "^0.7.0", "cac": "^6.7.14", "detect-package-manager": "^3.0.2", "fs-extra": "^11.3.0", "picocolors": "^1.1.1" }, "bin": "_lib/bin.js" }, "sha512-Lv1Bd3WZEgwG4nrogkM54m8viW+TWPlGivLyEi7aNb3cuKPsEfMDZ/kTbo87fzOGtsZ2yh7scO54ZmVhhgBgTw=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "css-selector-parser": ["css-selector-parser@3.3.0", "", {}, "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g=="], + + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "cytoscape": ["cytoscape@3.34.0", "", {}, "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg=="], + + "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], + + "cytoscape-fcose": ["cytoscape-fcose@2.2.0", "", { "dependencies": { "cose-base": "^2.2.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ=="], + + "d3": ["d3@7.9.0", "", { "dependencies": { "d3-array": "3", "d3-axis": "3", "d3-brush": "3", "d3-chord": "3", "d3-color": "3", "d3-contour": "4", "d3-delaunay": "6", "d3-dispatch": "3", "d3-drag": "3", "d3-dsv": "3", "d3-ease": "3", "d3-fetch": "3", "d3-force": "3", "d3-format": "3", "d3-geo": "3", "d3-hierarchy": "3", "d3-interpolate": "3", "d3-path": "3", "d3-polygon": "3", "d3-quadtree": "3", "d3-random": "3", "d3-scale": "4", "d3-scale-chromatic": "3", "d3-selection": "3", "d3-shape": "3", "d3-time": "3", "d3-time-format": "4", "d3-timer": "3", "d3-transition": "3", "d3-zoom": "3" } }, "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA=="], + + "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], + + "d3-axis": ["d3-axis@3.0.0", "", {}, "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="], + + "d3-brush": ["d3-brush@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "3", "d3-transition": "3" } }, "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ=="], + + "d3-chord": ["d3-chord@3.0.1", "", { "dependencies": { "d3-path": "1 - 3" } }, "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g=="], + + "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], + + "d3-contour": ["d3-contour@4.0.2", "", { "dependencies": { "d3-array": "^3.2.0" } }, "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA=="], + + "d3-delaunay": ["d3-delaunay@6.0.4", "", { "dependencies": { "delaunator": "5" } }, "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A=="], + + "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], + + "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="], + + "d3-dsv": ["d3-dsv@3.0.1", "", { "dependencies": { "commander": "7", "iconv-lite": "0.6", "rw": "1" }, "bin": { "csv2json": "bin/dsv2json.js", "csv2tsv": "bin/dsv2dsv.js", "dsv2dsv": "bin/dsv2dsv.js", "dsv2json": "bin/dsv2json.js", "json2csv": "bin/json2dsv.js", "json2dsv": "bin/json2dsv.js", "json2tsv": "bin/json2dsv.js", "tsv2csv": "bin/dsv2dsv.js", "tsv2json": "bin/dsv2json.js" } }, "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q=="], + + "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], + + "d3-fetch": ["d3-fetch@3.0.1", "", { "dependencies": { "d3-dsv": "1 - 3" } }, "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw=="], + + "d3-force": ["d3-force@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", "d3-timer": "1 - 3" } }, "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg=="], + + "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], + + "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "2.5.0 - 3" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="], + + "d3-hierarchy": ["d3-hierarchy@3.1.2", "", {}, "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="], + + "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], + + "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], + + "d3-polygon": ["d3-polygon@3.0.1", "", {}, "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="], + + "d3-quadtree": ["d3-quadtree@3.0.1", "", {}, "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="], + + "d3-random": ["d3-random@3.0.1", "", {}, "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="], + + "d3-sankey": ["d3-sankey@0.12.3", "", { "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" } }, "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ=="], + + "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], + + "d3-scale-chromatic": ["d3-scale-chromatic@3.1.0", "", { "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" } }, "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ=="], + + "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="], + + "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], + + "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], + + "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], + + "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], + + "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="], + + "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], + + "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], + + "dayjs": ["dayjs@1.11.21", "", {}, "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="], + + "debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + + "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], + + "deep-object-diff": ["deep-object-diff@1.1.9", "", {}, "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + + "detect-package-manager": ["detect-package-manager@3.0.2", "", { "dependencies": { "execa": "^5.1.1" } }, "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "direction": ["direction@2.0.1", "", { "bin": "cli.js" }, "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA=="], + + "dompurify": ["dompurify@3.4.8", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.371", "", {}, "sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w=="], + + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "enhanced-resolve": ["enhanced-resolve@5.23.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA=="], + + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "es-module-lexer": ["es-module-lexer@2.1.0", "", {}, "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ=="], + + "es-toolkit": ["es-toolkit@1.47.0", "", {}, "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw=="], + + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], + + "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], + + "esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": "bin/esbuild" }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + + "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], + + "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], + + "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + + "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="], + + "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], + + "estree-util-value-to-estree": ["estree-util-value-to-estree@3.5.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ=="], + + "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], + + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "eval": ["eval@0.1.8", "", { "dependencies": { "@types/node": "*", "require-like": ">= 0.1.1" } }, "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw=="], + + "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], + + "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], + + "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], + + "fs-extra": ["fs-extra@11.3.5", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg=="], + + "fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], + + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], + + "hast-util-classnames": ["hast-util-classnames@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ=="], + + "hast-util-from-dom": ["hast-util-from-dom@5.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hastscript": "^9.0.0", "web-namespaces": "^2.0.0" } }, "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q=="], + + "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], + + "hast-util-from-html-isomorphic": ["hast-util-from-html-isomorphic@2.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-dom": "^5.0.0", "hast-util-from-html": "^2.0.0", "unist-util-remove-position": "^5.0.0" } }, "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw=="], + + "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], + + "hast-util-has-property": ["hast-util-has-property@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA=="], + + "hast-util-heading-rank": ["hast-util-heading-rank@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA=="], + + "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], + + "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], + + "hast-util-select": ["hast-util-select@6.0.4", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "bcp-47-match": "^2.0.0", "comma-separated-tokens": "^2.0.0", "css-selector-parser": "^3.0.0", "devlop": "^1.0.0", "direction": "^2.0.0", "hast-util-has-property": "^3.0.0", "hast-util-to-string": "^3.0.0", "hast-util-whitespace": "^3.0.0", "nth-check": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw=="], + + "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], + + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], + + "hast-util-to-string": ["hast-util-to-string@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A=="], + + "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "hastscript": ["hastscript@8.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw=="], + + "hono": ["hono@4.12.25", "", {}, "sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + + "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + + "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], + + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + + "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + + "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "javascript-stringify": ["javascript-stringify@2.1.0", "", {}, "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="], + + "jiti": ["jiti@2.7.0", "", { "bin": "lib/jiti-cli.mjs" }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json5": ["json5@2.2.3", "", { "bin": "lib/cli.js" }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], + + "katex": ["katex@0.16.47", "", { "dependencies": { "commander": "^8.3.0" }, "bin": "cli.js" }, "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg=="], + + "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], + + "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], + + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], + + "log-symbols": ["log-symbols@5.1.0", "", { "dependencies": { "chalk": "^5.0.0", "is-unicode-supported": "^1.1.0" } }, "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA=="], + + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "lucide-react": ["lucide-react@0.468.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } }, "sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "mark.js": ["mark.js@8.11.1", "", {}, "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="], + + "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], + + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], + + "marked": ["marked@16.4.2", "", { "bin": "bin/marked.js" }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], + + "mdast-util-directive": ["mdast-util-directive@3.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q=="], + + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], + + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], + + "mdast-util-frontmatter": ["mdast-util-frontmatter@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "escape-string-regexp": "^5.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" } }, "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA=="], + + "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], + + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], + + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], + + "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], + + "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], + + "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], + + "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], + + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], + + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], + + "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], + + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], + + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + + "media-query-parser": ["media-query-parser@2.0.2", "", { "dependencies": { "@babel/runtime": "^7.12.5" } }, "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w=="], + + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "mermaid": ["mermaid@11.15.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "es-toolkit": "^1.45.1", "katex": "^0.16.25", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw=="], + + "mermaid-isomorphic": ["mermaid-isomorphic@3.1.0", "", { "dependencies": { "@fortawesome/fontawesome-free": "^6.0.0", "katex": "^0.16.0", "mermaid": "^11.0.0" }, "peerDependencies": { "playwright": "1" } }, "sha512-mzrvfEVjnJIkJlEqxp3eMuR1wS0TeLCH1VK5E/T5yzWaBwI3JqjJuw70yUIThSCDJ5bRs6O3rgfp00oBAbvSeQ=="], + + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], + + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], + + "micromark-extension-directive": ["micromark-extension-directive@3.0.2", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "parse-entities": "^4.0.0" } }, "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA=="], + + "micromark-extension-frontmatter": ["micromark-extension-frontmatter@2.0.0", "", { "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg=="], + + "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], + + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], + + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], + + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], + + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], + + "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], + + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], + + "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="], + + "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="], + + "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], + + "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="], + + "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], + + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], + + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], + + "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], + + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], + + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], + + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], + + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], + + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], + + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="], + + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], + + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], + + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + + "mime": ["mime@1.6.0", "", { "bin": "cli.js" }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": "cli.js" }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], + + "minisearch": ["minisearch@7.2.0", "", {}, "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg=="], + + "mlly": ["mlly@1.8.2", "", { "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.3" } }, "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA=="], + + "modern-ahocorasick": ["modern-ahocorasick@1.1.0", "", {}, "sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ=="], + + "ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "nanoid": ["nanoid@3.3.12", "", { "bin": "bin/nanoid.cjs" }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], + + "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + + "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], + + "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "nuqs": ["nuqs@2.8.9", "", { "dependencies": { "@standard-schema/spec": "1.0.0" }, "peerDependencies": { "@remix-run/react": ">=2", "@tanstack/react-router": "^1", "next": ">=14.2.0", "react": ">=18.2.0 || ^19.0.0-0", "react-router": "^5 || ^6 || ^7", "react-router-dom": "^5 || ^6 || ^7" }, "optionalPeers": ["@remix-run/react", "@tanstack/react-router", "next", "react-router-dom"] }, "sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ=="], + + "obug": ["obug@2.1.2", "", {}, "sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], + + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], + + "ora": ["ora@7.0.1", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", "cli-spinners": "^2.9.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^1.3.0", "log-symbols": "^5.1.0", "stdin-discarder": "^0.1.0", "string-width": "^6.1.0", "strip-ansi": "^7.1.0" } }, "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw=="], + + "p-limit": ["p-limit@5.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], + + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + + "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "playwright": ["playwright@1.60.0", "", { "dependencies": { "playwright-core": "1.60.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": "cli.js" }, "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA=="], + + "playwright-core": ["playwright-core@1.60.0", "", { "bin": "cli.js" }, "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA=="], + + "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], + + "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], + + "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], + + "radix-ui": ["radix-ui@1.5.0", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-accessible-icon": "1.1.9", "@radix-ui/react-accordion": "1.2.13", "@radix-ui/react-alert-dialog": "1.1.16", "@radix-ui/react-arrow": "1.1.9", "@radix-ui/react-aspect-ratio": "1.1.9", "@radix-ui/react-avatar": "1.1.12", "@radix-ui/react-checkbox": "1.3.4", "@radix-ui/react-collapsible": "1.1.13", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-context-menu": "2.3.0", "@radix-ui/react-dialog": "1.1.16", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-dropdown-menu": "2.1.17", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.9", "@radix-ui/react-form": "0.1.9", "@radix-ui/react-hover-card": "1.1.16", "@radix-ui/react-label": "2.1.9", "@radix-ui/react-menu": "2.1.17", "@radix-ui/react-menubar": "1.1.17", "@radix-ui/react-navigation-menu": "1.2.15", "@radix-ui/react-one-time-password-field": "0.1.9", "@radix-ui/react-password-toggle-field": "0.1.4", "@radix-ui/react-popover": "1.1.16", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-progress": "1.1.9", "@radix-ui/react-radio-group": "1.4.0", "@radix-ui/react-roving-focus": "1.1.12", "@radix-ui/react-scroll-area": "1.2.11", "@radix-ui/react-select": "2.3.0", "@radix-ui/react-separator": "1.1.9", "@radix-ui/react-slider": "1.4.0", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-switch": "1.3.0", "@radix-ui/react-tabs": "1.1.14", "@radix-ui/react-toast": "1.2.16", "@radix-ui/react-toggle": "1.1.11", "@radix-ui/react-toggle-group": "1.1.12", "@radix-ui/react-toolbar": "1.1.12", "@radix-ui/react-tooltip": "1.2.9", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-escape-keydown": "1.1.2", "@radix-ui/react-use-is-hydrated": "0.1.1", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-size": "1.1.2", "@radix-ui/react-visually-hidden": "1.2.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Nzh2HNpClgB31FBHRqt2xG8XNUfVfQRpf34hACC5PNrXTd5JdXdqOXwLs3BL+D8CNYiNQiJiT8QGr5Q4vq+00w=="], + + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="], + + "react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="], + + "react-intersection-observer": ["react-intersection-observer@9.16.0", "", { "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-w9nJSEp+DrW9KmQmeWHQyfaP6b03v+TdXynaoA964Wxt7mdR3An11z4NNCQgL4gKSK7y1ver2Fq+JKH6CWEzUA=="], + + "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], + + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], + + "react-router": ["react-router@7.17.0", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-FDELK7rTMlCHO5+reyXsPlmfr7N1F91lPHsWYfMEGQm/KQ+F4JFM8jGoeQDmDvdTs93Fw9aSilH+uKRb4/jXvQ=="], + + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], + + "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], + + "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], + + "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], + + "regex": ["regex@5.1.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw=="], + + "regex-recursion": ["regex-recursion@5.1.1", "", { "dependencies": { "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + + "rehype-autolink-headings": ["rehype-autolink-headings@7.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-is-element": "^3.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw=="], + + "rehype-class-names": ["rehype-class-names@2.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-classnames": "^3.0.0", "hast-util-select": "^6.0.0", "unified": "^11.0.4" } }, "sha512-jldCIiAEvXKdq8hqr5f5PzNdIDkvHC6zfKhwta9oRoMu7bn0W7qLES/JrrjBvr9rKz3nJ8x4vY1EWI+dhjHVZQ=="], + + "rehype-mermaid": ["rehype-mermaid@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html-isomorphic": "^2.0.0", "hast-util-to-text": "^4.0.0", "mermaid-isomorphic": "^3.0.0", "mini-svg-data-uri": "^1.0.0", "space-separated-tokens": "^2.0.0", "unified": "^11.0.0", "unist-util-visit-parents": "^6.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "playwright": "1" } }, "sha512-fxrD5E4Fa1WXUjmjNDvLOMT4XB1WaxcfycFIWiYU0yEMQhcTDElc9aDFnbDFRLxG1Cfo1I3mfD5kg4sjlWaB+Q=="], + + "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], + + "rehype-slug": ["rehype-slug@6.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "github-slugger": "^2.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-to-string": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A=="], + + "remark-directive": ["remark-directive@3.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-directive": "^3.0.0", "micromark-extension-directive": "^3.0.0", "unified": "^11.0.0" } }, "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A=="], + + "remark-frontmatter": ["remark-frontmatter@5.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0", "unified": "^11.0.0" } }, "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ=="], + + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], + + "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="], + + "remark-mdx-frontmatter": ["remark-mdx-frontmatter@5.2.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "estree-util-value-to-estree": "^3.0.0", "toml": "^3.0.0", "unified": "^11.0.0", "unist-util-mdx-define": "^1.0.0", "yaml": "^2.0.0" } }, "sha512-U/hjUYTkQqNjjMRYyilJgLXSPF65qbLPdoESOkXyrwz2tVyhAnm4GUKhfXqOOS9W34M3545xEMq+aMpHgVjEeQ=="], + + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + + "require-like": ["require-like@0.1.2", "", {}, "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A=="], + + "restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], + + "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], + + "rolldown": ["rolldown@1.0.3", "", { "dependencies": { "@oxc-project/types": "=0.133.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.3", "@rolldown/binding-darwin-arm64": "1.0.3", "@rolldown/binding-darwin-x64": "1.0.3", "@rolldown/binding-freebsd-x64": "1.0.3", "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", "@rolldown/binding-linux-arm64-gnu": "1.0.3", "@rolldown/binding-linux-arm64-musl": "1.0.3", "@rolldown/binding-linux-ppc64-gnu": "1.0.3", "@rolldown/binding-linux-s390x-gnu": "1.0.3", "@rolldown/binding-linux-x64-gnu": "1.0.3", "@rolldown/binding-linux-x64-musl": "1.0.3", "@rolldown/binding-openharmony-arm64": "1.0.3", "@rolldown/binding-wasm32-wasi": "1.0.3", "@rolldown/binding-win32-arm64-msvc": "1.0.3", "@rolldown/binding-win32-x64-msvc": "1.0.3" }, "bin": "bin/cli.mjs" }, "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g=="], + + "rollup": ["rollup@4.61.1", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.61.1", "@rollup/rollup-android-arm64": "4.61.1", "@rollup/rollup-darwin-arm64": "4.61.1", "@rollup/rollup-darwin-x64": "4.61.1", "@rollup/rollup-freebsd-arm64": "4.61.1", "@rollup/rollup-freebsd-x64": "4.61.1", "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", "@rollup/rollup-linux-arm-musleabihf": "4.61.1", "@rollup/rollup-linux-arm64-gnu": "4.61.1", "@rollup/rollup-linux-arm64-musl": "4.61.1", "@rollup/rollup-linux-loong64-gnu": "4.61.1", "@rollup/rollup-linux-loong64-musl": "4.61.1", "@rollup/rollup-linux-ppc64-gnu": "4.61.1", "@rollup/rollup-linux-ppc64-musl": "4.61.1", "@rollup/rollup-linux-riscv64-gnu": "4.61.1", "@rollup/rollup-linux-riscv64-musl": "4.61.1", "@rollup/rollup-linux-s390x-gnu": "4.61.1", "@rollup/rollup-linux-x64-gnu": "4.61.1", "@rollup/rollup-linux-x64-musl": "4.61.1", "@rollup/rollup-openbsd-x64": "4.61.1", "@rollup/rollup-openharmony-arm64": "4.61.1", "@rollup/rollup-win32-arm64-msvc": "4.61.1", "@rollup/rollup-win32-ia32-msvc": "4.61.1", "@rollup/rollup-win32-x64-gnu": "4.61.1", "@rollup/rollup-win32-x64-msvc": "4.61.1", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA=="], + + "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], + + "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + + "semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "send": ["send@0.19.2", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "~0.5.2", "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "~2.4.1", "range-parser": "~1.2.1", "statuses": "~2.0.2" } }, "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg=="], + + "serve-static": ["serve-static@1.16.3", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "~0.19.1" } }, "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA=="], + + "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], + + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "stdin-discarder": ["stdin-discarder@0.1.0", "", { "dependencies": { "bl": "^5.0.0" } }, "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ=="], + + "string-width": ["string-width@6.1.0", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^10.2.1", "strip-ansi": "^7.0.1" } }, "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + + "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], + + "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], + + "tailwindcss": ["tailwindcss@4.1.15", "", {}, "sha512-k2WLnWkYFkdpRv+Oby3EBXIyQC8/s1HOFMBUViwtAh6Z5uAozeUSMQlIsn/c6Q2iJzqG6aJT3wdPaRNj70iYxQ=="], + + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + + "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + + "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "twoslash": ["twoslash@0.3.8", "", { "dependencies": { "@typescript/vfs": "^1.6.4", "twoslash-protocol": "0.3.8" }, "peerDependencies": { "typescript": "^5.5.0 || ^6.0.0" } }, "sha512-OeDz0kDl8sqPUN3nr7gqcvOs70f5lZsdhKYTX3/SgB9OvdadzzoYJI/4SBXhXV1HG8E9fLc+e17itoRYTxmoig=="], + + "twoslash-protocol": ["twoslash-protocol@0.3.8", "", {}, "sha512-HmvAHoiEviK8LqvAQyc9/irkdvwTUiR1fHmNwH/0gq8EHxyBt4PWVPixjEXg6wJu1u6yBrILEWXGK9Kw58/8yQ=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": "script/cli.js" }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], + + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], + + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], + + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + + "unist-util-mdx-define": ["unist-util-mdx-define@1.1.2", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-9ncH7i7TN5Xn7/tzX5bE3rXgz1X/u877gYVAUB3mLeTKYJmQHmqKTDBi6BTGXV7AeolBCI9ErcVsOt2qryoD0g=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], + + "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@14.0.0", "", { "bin": "dist-node/bin/uuid" }, "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], + + "vfile-matter": ["vfile-matter@5.0.1", "", { "dependencies": { "vfile": "^6.0.0", "yaml": "^2.0.0" } }, "sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + + "vite": ["vite@7.3.5", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx"], "bin": "bin/vite.js" }, "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww=="], + + "vite-node": ["vite-node@6.0.0", "", { "dependencies": { "cac": "^7.0.0", "es-module-lexer": "^2.0.0", "obug": "^2.1.1", "pathe": "^2.0.3", "vite": "^8.0.0" }, "bin": "dist/cli.mjs" }, "sha512-oj4PVrT+pDh6GYf5wfUXkcZyekYS8kKPfLPXVl8qe324Ec6l4K2DUKNadRbZ3LQl0qGcDz+PyOo7ZAh00Y+JjQ=="], + + "vocs": ["vocs@1.4.1", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "@hono/node-server": "^1.19.5", "@mdx-js/mdx": "^3.1.1", "@mdx-js/react": "^3.1.1", "@mdx-js/rollup": "^3.1.1", "@noble/hashes": "^1.7.1", "@radix-ui/colors": "^3.0.0", "@radix-ui/react-accordion": "^1.2.3", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-label": "^2.1.2", "@radix-ui/react-navigation-menu": "^1.2.5", "@radix-ui/react-popover": "^1.1.6", "@radix-ui/react-tabs": "^1.1.3", "@shikijs/rehype": "^1", "@shikijs/transformers": "^1", "@shikijs/twoslash": "^1", "@tailwindcss/vite": "4.1.15", "@vanilla-extract/css": "^1.17.4", "@vanilla-extract/dynamic": "^2.1.5", "@vanilla-extract/vite-plugin": "^5.1.1", "@vitejs/plugin-react": "^5.0.4", "autoprefixer": "^10.4.21", "cac": "^6.7.14", "chroma-js": "^3.1.2", "clsx": "^2.1.1", "compression": "^1.8.1", "create-vocs": "^1.0.0-alpha.5", "cross-spawn": "^7.0.6", "fs-extra": "^11.3.2", "hastscript": "^8.0.0", "hono": "^4.10.3", "mark.js": "^8.11.1", "mdast-util-directive": "^3.1.0", "mdast-util-from-markdown": "^2.0.2", "mdast-util-frontmatter": "^2.0.1", "mdast-util-gfm": "^3.1.0", "mdast-util-mdx": "^3.0.0", "mdast-util-mdx-jsx": "^3.2.0", "mdast-util-to-hast": "^13.2.0", "mdast-util-to-markdown": "^2.1.2", "minisearch": "^7.2.0", "nuqs": "^2.7.2", "ora": "^7.0.1", "p-limit": "^5.0.0", "picomatch": "^4.0.3", "playwright": "^1.52.0", "postcss": "^8.5.2", "radix-ui": "^1.1.3", "react-intersection-observer": "^9.15.1", "react-router": "^7.9.4", "rehype-autolink-headings": "^7.1.0", "rehype-class-names": "^2.0.0", "rehype-mermaid": "^3.0.0", "rehype-slug": "^6.0.0", "remark-directive": "^3.0.1", "remark-frontmatter": "^5.0.0", "remark-gfm": "^4.0.1", "remark-mdx": "^3.1.1", "remark-mdx-frontmatter": "^5.2.0", "remark-parse": "^11.0.0", "serve-static": "^1.16.2", "shiki": "^1", "toml": "^3.0.0", "twoslash": "~0.3.4", "ua-parser-js": "^1.0.40", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "vfile-matter": "^5.0.1", "vite": "^7.1.11", "yaml": "^2.8.1" }, "peerDependencies": { "react": "^19", "react-dom": "^19" }, "bin": "_lib/cli/index.js" }, "sha512-PwCODbht+/0f6wtAyz5czqdWaMX80KlxOc6Mkqfd0u6bboTZ+YcyBuZaiQwJ4lkDE6NvSrCosPVD5CxGyvtitg=="], + + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@2.9.0", "", { "bin": "bin.mjs" }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], + + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@babel/traverse/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "@shikijs/twoslash/twoslash": ["twoslash@0.2.12", "", { "dependencies": { "@typescript/vfs": "^1.6.0", "twoslash-protocol": "0.2.12" }, "peerDependencies": { "typescript": "*" } }, "sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw=="], + + "@typescript/vfs/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@vanilla-extract/integration/esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": "bin/esbuild" }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], + + "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], + + "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], + + "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], + + "hast-util-from-dom/hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + + "hast-util-from-parse5/hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + + "hast-util-from-parse5/property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "hast-util-select/property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "hast-util-to-estree/property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "hast-util-to-html/property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "hast-util-to-jsx-runtime/property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "micromark/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + + "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "send/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "vite-node/cac": ["cac@7.0.0", "", {}, "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ=="], + + "vite-node/vite": ["vite@8.0.16", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.3", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@vitejs/devtools", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx"], "bin": "bin/vite.js" }, "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw=="], + + "@babel/core/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@babel/traverse/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@shikijs/twoslash/twoslash/twoslash-protocol": ["twoslash-protocol@0.2.12", "", {}, "sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg=="], + + "@typescript/vfs/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="], + + "@vanilla-extract/integration/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="], + + "@vanilla-extract/integration/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="], + + "@vanilla-extract/integration/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="], + + "@vanilla-extract/integration/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], + + "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], + + "d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], + + "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], + + "hast-util-from-dom/hastscript/property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "micromark/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "vite-node/vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "vite-node/vite/lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "vite-node/vite/lightningcss/lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "vite-node/vite/lightningcss/lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "vite-node/vite/lightningcss/lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "vite-node/vite/lightningcss/lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "vite-node/vite/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "vite-node/vite/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "vite-node/vite/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "vite-node/vite/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "vite-node/vite/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "vite-node/vite/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "vite-node/vite/lightningcss/lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + } +} diff --git a/docs/pages/en/explanation/build-overview.mdx b/docs/pages/en/explanation/build-overview.mdx index 4b19d1f..31130e6 100755 --- a/docs/pages/en/explanation/build-overview.mdx +++ b/docs/pages/en/explanation/build-overview.mdx @@ -20,4 +20,4 @@ New to Stable? Run the [Quick start](/en/tutorial/quick-start) first. It takes f - [**Quick start**](/en/tutorial/quick-start): Connect to testnet, fund a wallet, and send your first USDT0 transaction. - [**Send your first USDT0**](/en/tutorial/send-usdt0): Native and ERC-20 transfers on the same balance, with TypeScript examples. - [**Deploy a smart contract**](/en/tutorial/smart-contract): Scaffold Foundry, configure Stable, and deploy the Counter contract. -- [**Stable SDK**](/en/explanation/sdk-overview): Use the typed TypeScript client for transfer, bridge, and swap on Stable. +- [**Tools and SDK**](/en/explanation/tools-overview): Reach for the typed TypeScript SDKs, the service APIs, and the MCP servers. diff --git a/docs/pages/en/explanation/gas-waiver.mdx b/docs/pages/en/explanation/gas-waiver.mdx index a03f510..73109dc 100755 --- a/docs/pages/en/explanation/gas-waiver.mdx +++ b/docs/pages/en/explanation/gas-waiver.mdx @@ -52,6 +52,18 @@ Gas Waiver fits any flow where the end user shouldn't have to hold USDT0 for gas For flows where the user does hold USDT0 but wants to bundle multiple calls into one signed transaction, see [EIP-7702 delegation](/en/reference/eip-7702-api) instead. +## Choosing an integration path + +All three paths produce the same on-chain result. They differ in who holds the waiver key and how much you build. + +| Path | Who holds the waiver key | Use when | +| :--- | :--- | :--- | +| [Hosted Waiver Server](/en/how-to/integrate-gas-waiver) | Stable, and you authenticate with an API key | You want the shortest path and can depend on Stable's service for submission. | +| [Enterprise SDK](/en/how-to/relay-with-gas-waiver) | You, registered through governance | You run your own waiver in TypeScript and want one call to build, sign, and broadcast. | +| [Self-hosted wrappers](/en/how-to/self-hosted-gas-waiver) | You, registered through governance | You construct wrapper transactions yourself, in a language the SDK doesn't cover. | + +The hosted server registers and operates the waiver for you, so you never construct a `WrapperTx`. Both self-hosted paths need a governance-registered waiver address, and `@stablechain/enterprise` is the typed client for that model. + ## Next recommended - [**Enable gas-free transactions**](/en/how-to/integrate-gas-waiver): Integrate the hosted Waiver Server API with API-key submission and NDJSON responses. diff --git a/docs/pages/en/explanation/tools-overview.mdx b/docs/pages/en/explanation/tools-overview.mdx new file mode 100644 index 0000000..6eecb79 --- /dev/null +++ b/docs/pages/en/explanation/tools-overview.mdx @@ -0,0 +1,39 @@ +--- +title: "Tools and SDK" +description: "Pick the right Stable tool: the typed TypeScript SDKs, the gas waiver and EIP-7702 service APIs, and the MCP servers for AI clients." +diataxis: "explanation" +--- + +# Tools and SDK + +Everything you call Stable with lives here. Building a product on Stable? Start with the [Stable SDK](/en/explanation/sdk-overview) and drop down to a service API when you need a rail the SDK doesn't wrap. Sponsoring gas or relaying transactions from a backend? Start with the [Enterprise SDK](/en/explanation/enterprise-sdk). Wiring Stable into an AI editor or agent? Go to [Develop with AI](/en/how-to/develop-with-ai). + +## Build with SDKs + +- [**Stable SDK**](/en/explanation/sdk-overview): `@stablechain/sdk`, the typed TypeScript client for transfer, bridge, swap, and vault yield. It wraps viem and handles routing, approvals, decimals, and chain switching. +- [**SDK quickstart**](/en/tutorial/sdk-quickstart): Install the package, send your first USDT0 transfer on testnet, and preview a mainnet bridge quote. +- [**SDK reference**](/en/reference/sdk): `createStable`, `createStableReader`, the transfer, bridge, swap, and earn methods, enums, and error classes. +- [**Enterprise SDK**](/en/explanation/enterprise-sdk): `@stablechain/enterprise`, the server-side client for gas-waived transactions and reserved Enterprise-lane blockspace. +- [**Enterprise SDK reference**](/en/reference/enterprise-sdk): `createStableEnterprise`, both rails, build helpers, and error classes. + +## Use the SDK with your stack + +- [**viem**](/en/how-to/sdk-with-viem): Sign three ways: a private-key Account, a browser Transport, or a pre-built viem WalletClient. +- [**wagmi**](/en/how-to/sdk-with-wagmi): Wire the SDK into a React app with `useWalletClient`, `useAccount`, and `useChainId`. +- [**Earn yield**](/en/how-to/earn-yield): Deposit USDT0 into a Morpho vault, read APY and position, withdraw, and claim Merkl rewards. + +## Service APIs + +- [**Gas waiver protocol**](/en/reference/gas-waiver-api): Transaction formats, marker routing, governance controls, and the Waiver Server API you post signed `InnerTx` payloads to. +- [**EIP-7702**](/en/reference/eip-7702-api): Delegation transaction format and RPC behavior for pointing an EOA's account code at a smart contract. + +## AI and agent tooling + +- [**Develop with AI**](/en/how-to/develop-with-ai): Add the Docs MCP and Runtime MCP servers to any MCP-compatible client, plus plain-text docs for tools without MCP. +- [**Pay with MCP server**](/en/how-to/pay-with-mcp): Expose x402-paid APIs as MCP tools so AI clients call and pay for them through prompts. + +## Where to go next + +- [**Quick start**](/en/tutorial/quick-start): Connect to testnet, fund a wallet, and send your first USDT0 transaction. +- [**JSON-RPC API**](/en/reference/json-rpc-api): Supported methods across the `eth`, `net`, `web3`, and `debug` namespaces. +- [**Build**](/en/explanation/build-overview): Accounts, payments, contracts, and agents, organized by what you're shipping. diff --git a/docs/pages/en/how-to/integrate-gas-waiver.mdx b/docs/pages/en/how-to/integrate-gas-waiver.mdx index eaaf45d..29f1288 100755 --- a/docs/pages/en/how-to/integrate-gas-waiver.mdx +++ b/docs/pages/en/how-to/integrate-gas-waiver.mdx @@ -8,7 +8,7 @@ diataxis: "how-to" Gas Waiver enables gas-free transactions on Stable. With Gas Waiver, applications cover gas fees on behalf of users, so users can interact with contracts without holding USDT0 for gas. -This guide covers integrating via the Waiver Server API. +This guide covers the hosted Waiver Server API, where Stable operates the waiver and you authenticate with an API key. To register your own waiver address through governance instead, see [Choosing an integration path](/en/explanation/gas-waiver#choosing-an-integration-path). :::note **Concept:** For what Gas Waiver is, why it exists, and how governance-authorized waivers work, see [Gas waiver](/en/explanation/gas-waiver). For the full protocol specification (wrapper transaction format, marker address, execution semantics, security model), see [Gas waiver protocol](/en/reference/gas-waiver-api). @@ -204,4 +204,4 @@ WebSocket interface for streaming submissions. Authentication: required (Bearer) - [**Zero gas transactions**](/en/how-to/zero-gas-transactions): See the demo-focused flow and how to verify zero gas on a receipt. - [**Self-hosted Gas Waiver**](/en/how-to/self-hosted-gas-waiver): Run your own waiver without the hosted API. - [**Gas waiver protocol**](/en/reference/gas-waiver-api): Full wrapper transaction spec and governance model. -- [**Stable SDK**](/en/explanation/sdk-overview): Use the typed client to sign user transactions you then submit to the Waiver Server. +- [**Relay with gas waiver**](/en/how-to/relay-with-gas-waiver): Sponsor gas from your own governance-registered waiver with the Enterprise SDK. diff --git a/docs/pages/en/how-to/relay-with-gas-waiver.mdx b/docs/pages/en/how-to/relay-with-gas-waiver.mdx index a41b82d..9bf9671 100644 --- a/docs/pages/en/how-to/relay-with-gas-waiver.mdx +++ b/docs/pages/en/how-to/relay-with-gas-waiver.mdx @@ -153,3 +153,4 @@ See the full [`ErrorCode`](/en/reference/enterprise-sdk#errorcode) table for eve - [**Send guaranteed transactions**](/en/how-to/send-guaranteed-transactions): Land transactions in reserved Enterprise-lane blockspace, and combine it with gas waiver. - [**Enterprise SDK reference**](/en/reference/enterprise-sdk#relay-with-gas-waiver): Every method, config option, and error class in full. - [**Gas waiver**](/en/explanation/gas-waiver): How zero-gas transactions work at the protocol level. +- [**Enable gas-free transactions**](/en/how-to/integrate-gas-waiver): Use Stable's hosted Waiver Server instead of registering your own waiver. diff --git a/docs/pages/en/how-to/self-hosted-gas-waiver.mdx b/docs/pages/en/how-to/self-hosted-gas-waiver.mdx index c054baf..9954e27 100755 --- a/docs/pages/en/how-to/self-hosted-gas-waiver.mdx +++ b/docs/pages/en/how-to/self-hosted-gas-waiver.mdx @@ -16,6 +16,10 @@ This guide covers registering a waiver address, collecting signed user transacti For the hosted Waiver Server API integration path, see [Enable gas-free transactions](/en/how-to/integrate-gas-waiver). +:::tip +`@stablechain/enterprise` does everything below in one call against the same governance-registered waiver. If you're writing TypeScript, use [Relay with gas waiver](/en/how-to/relay-with-gas-waiver) instead of building wrapper transactions by hand. +::: + ## Prerequisites - A waiver address registered on-chain via validator governance. diff --git a/docs/pages/en/reference/gas-waiver-api.mdx b/docs/pages/en/reference/gas-waiver-api.mdx index 73af0a8..341f351 100755 --- a/docs/pages/en/reference/gas-waiver-api.mdx +++ b/docs/pages/en/reference/gas-waiver-api.mdx @@ -137,11 +137,15 @@ Gas Waiver introduces a service dependency if partners route submissions through ## Integration -You integrate by: +Three paths produce the same on-chain result, differing in who holds the waiver key. See [Choosing an integration path](/en/explanation/gas-waiver#choosing-an-integration-path). + +Against the hosted Waiver Server: 1. Collect a signed `InnerTx` from the user (`gasPrice = 0`). 2. Submit the signed inner transaction to the Waiver Server API. -3. Handle streamed results and surfacing transaction hashes to end users. +3. Handle the streamed results and surface transaction hashes to end users. + +From a waiver address you registered yourself, `@stablechain/enterprise` builds, signs, and broadcasts the `WrapperTx` in one call. See [Relay with gas waiver](/en/how-to/relay-with-gas-waiver), or [Self-hosted gas waiver](/en/how-to/self-hosted-gas-waiver) to construct wrappers directly. ## Waiver server @@ -274,4 +278,5 @@ async function createInnerTx(userWallet, contractAddress, callData, nonce) { - [**Zero gas transactions**](/en/how-to/zero-gas-transactions): Demo-focused walkthrough with a receipt showing zero gas fee. - [**Enable gas-free transactions**](/en/how-to/integrate-gas-waiver): Full hosted-API integration guide with batch submissions and error handling. - [**Self-hosted Gas Waiver**](/en/how-to/self-hosted-gas-waiver): Run your own waiver infrastructure without the hosted API. +- [**Relay with gas waiver**](/en/how-to/relay-with-gas-waiver): Sponsor gas from your own waiver with the typed Enterprise SDK client. diff --git a/docs/pages/en/reference/node-operations-overview.mdx b/docs/pages/en/reference/node-operations-overview.mdx index 292d911..834cf7c 100755 --- a/docs/pages/en/reference/node-operations-overview.mdx +++ b/docs/pages/en/reference/node-operations-overview.mdx @@ -1,12 +1,12 @@ --- -title: "Operate" +title: "Run a Stable node" description: "Run a Stable node. Install, configure, monitor, and upgrade." diataxis: "reference" --- -# Operate +# Run a Stable node -Operate covers running a Stable node: full or archive, testnet or mainnet, from install through monitoring. For the chain-level behavior your node enforces (fee model, finality, USDT0 as gas), see [Gas pricing](/en/explanation/gas-pricing), [Finality](/en/explanation/finality), and the [Architecture overview](/en/explanation/core-optimization-overview). +This section covers running a Stable node: full or archive, testnet or mainnet, from install through monitoring. For the chain-level behavior your node enforces (fee model, finality, USDT0 as gas), see [Gas pricing](/en/explanation/gas-pricing), [Finality](/en/explanation/finality), and the [Architecture overview](/en/explanation/core-optimization-overview). ## Quick links diff --git a/docs/sidebar.json b/docs/sidebar.json index 6423545..76942b2 100644 --- a/docs/sidebar.json +++ b/docs/sidebar.json @@ -178,62 +178,6 @@ "text": "Quick Start", "link": "/en/tutorial/quick-start" }, - { - "text": "Stable SDK", - "collapsed": true, - "items": [ - { - "text": "Overview", - "link": "/en/explanation/sdk-overview" - }, - { - "text": "Quickstart", - "link": "/en/tutorial/sdk-quickstart" - }, - { - "text": "Reference", - "link": "/en/reference/sdk" - }, - { - "text": "Earn Yield", - "link": "/en/how-to/earn-yield" - }, - { - "text": "Viem Integration", - "link": "/en/how-to/sdk-with-viem" - }, - { - "text": "Wagmi Integration", - "link": "/en/how-to/sdk-with-wagmi" - } - ] - }, - { - "text": "Enterprise SDK", - "collapsed": true, - "items": [ - { - "text": "Overview", - "link": "/en/explanation/enterprise-sdk" - }, - { - "text": "Relay Transactions", - "link": "/en/how-to/relay-with-gas-waiver" - }, - { - "text": "Guaranteed Blockspace", - "link": "/en/how-to/send-guaranteed-transactions" - }, - { - "text": "Guaranteed Relayed Transactions", - "link": "/en/how-to/guaranteed-relayed-transactions" - }, - { - "text": "Reference", - "link": "/en/reference/enterprise-sdk" - } - ] - }, { "text": "Onboard users", "collapsed": true, @@ -583,7 +527,73 @@ ] }, { - "text": "Operate", + "text": "Tools and SDK", + "collapsed": true, + "items": [ + { + "text": "Tools and SDK overview", + "link": "/en/explanation/tools-overview" + }, + { + "text": "Stable SDK", + "collapsed": true, + "items": [ + { + "text": "Overview", + "link": "/en/explanation/sdk-overview" + }, + { + "text": "Quickstart", + "link": "/en/tutorial/sdk-quickstart" + }, + { + "text": "Reference", + "link": "/en/reference/sdk" + }, + { + "text": "Earn Yield", + "link": "/en/how-to/earn-yield" + }, + { + "text": "Viem Integration", + "link": "/en/how-to/sdk-with-viem" + }, + { + "text": "Wagmi Integration", + "link": "/en/how-to/sdk-with-wagmi" + } + ] + }, + { + "text": "Enterprise SDK", + "collapsed": true, + "items": [ + { + "text": "Overview", + "link": "/en/explanation/enterprise-sdk" + }, + { + "text": "Relay Transactions", + "link": "/en/how-to/relay-with-gas-waiver" + }, + { + "text": "Guaranteed Blockspace", + "link": "/en/how-to/send-guaranteed-transactions" + }, + { + "text": "Guaranteed Relayed Transactions", + "link": "/en/how-to/guaranteed-relayed-transactions" + }, + { + "text": "Reference", + "link": "/en/reference/enterprise-sdk" + } + ] + } + ] + }, + { + "text": "Run a Stable node", "collapsed": true, "items": [ { From 1222fd68b61cb9b190275700c4b213a870a2aac2 Mon Sep 17 00:00:00 2001 From: bastienrp Date: Mon, 21 Sep 2026 08:01:29 +0700 Subject: [PATCH 2/3] fix: add sqd --- docs/pages/en/reference/indexers.mdx | 34 +++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/pages/en/reference/indexers.mdx b/docs/pages/en/reference/indexers.mdx index 208d366..6cc9367 100755 --- a/docs/pages/en/reference/indexers.mdx +++ b/docs/pages/en/reference/indexers.mdx @@ -6,7 +6,7 @@ diataxis: "reference" # Indexers -Indexers, analytics platforms, and blockchain intelligence providers help you query on-chain data, measure activity, monitor transaction risk, and investigate fund flows on Stable. Stable is EVM-compatible, so standard Ethereum indexing tools work seamlessly. +Indexers, analytics platforms, and blockchain intelligence providers help you query on-chain data, measure activity, monitor transaction risk, and investigate fund flows on Stable. Stable is EVM-compatible, so standard Ethereum indexing tools work without modification. This page lists the providers available for indexing, analytics, compliance, and investigations on Stable. @@ -19,6 +19,7 @@ This page lists the providers available for indexing, analytics, compliance, and | [**The Graph**](https://thegraph.com/explorer/participants/indexers) | Indexer | [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) | Build, deploy, and query subgraphs using GraphQL. | | [**Goldsky**](https://goldsky.com/) | Indexer | [https://docs.goldsky.com/introduction](https://docs.goldsky.com/introduction) | High-performance indexing and real-time data streaming. | | [**Ormi Labs**](https://ormilabs.com/) | Indexer | [https://docs.ormilabs.com/subgraphs/quickstart](https://docs.ormilabs.com/subgraphs/quickstart) | Next-gen subgraph indexer with real-time data capabilities. | +| [**SQD**](https://sqd.dev/chains/stable/) | Indexer | [https://docs.sqd.dev/](https://docs.sqd.dev/) | Decoded historical and real-time streams; Stable datasets are by request. | | [**Allium**](https://www.allium.so/) | Analytics / Data Platform | [https://docs.allium.so/](https://docs.allium.so/) | Normalized blockchain datasets & analytics tooling. | | [**CoinMarketCap**](https://coinmarketcap.com/api/) | Market Data Aggregator | [https://coinmarketcap.com/api/documentation/v1/](https://coinmarketcap.com/api/documentation/v1/) | Market prices, listings, and tracking tools. | | [**CoinGecko**](https://www.coingecko.com/en/api) | Market Data Aggregator | [https://docs.coingecko.com/](https://docs.coingecko.com/) | Independent market data with developer APIs. | @@ -98,6 +99,37 @@ High-performance indexing platform with instant subgraphs and developer tooling. For 24/7 support, contact [support@goldsky.com](mailto:support@goldsky.com). +### SQD + +SQD serves Stable data through Portal, an HTTP streaming API that returns decoded, schema-typed tables rather than raw chain state, so you can index without running an archive node. Teams that need custom transforms use the Squid and Pipes SDKs to build an indexer, self-hosted or run on SQD Cloud. + +**Capabilities** + +- Historical and real-time streaming of blocks, transactions, and logs over a single HTTP endpoint +- Decoded, schema-typed tables covering `stable-mainnet` (chain ID 988) and `stable-testnet` (chain ID 2201) +- Squid and Pipes SDKs for custom indexers, with connectors for Postgres, ClickHouse, MongoDB, SQLite, and Parquet +- Blocks are validated by SQD Network workers before they reach the Portal + +:::note +Stable datasets are private on SQD. Access is provisioned by request for enterprise customers through SQD Private Portal, not through the public network. Testnet coverage starts at block 39,381,701 rather than genesis. +::: + +**Docs** + +Read the Stable coverage details, dataset slugs, and endpoints: + +[https://sqd.dev/chains/stable/](https://sqd.dev/chains/stable/) + +Stream decoded data from the Portal: + +[https://docs.sqd.dev/en/portal/evm/quickstart](https://docs.sqd.dev/en/portal/evm/quickstart) + +Build a custom indexer with the Pipes SDK: + +[https://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstart](https://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstart) + +**Get started**: [Contact SQD](https://sqd.dev/contact/) to provision access to the Stable datasets, then stream them from the Portal or point an SDK indexer at them. + ## 2. Analytics providers Analytics tools help teams track network activity, real-world payments, dashboards, usage flows, and contract interactions. From 9fa6633625bc1e6bdb1ab87c36886b9b39f63535 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 21 Sep 2026 01:06:47 +0000 Subject: [PATCH 3/3] i18n: auto-translate cn/ko for changed en content --- docs/pages/cn/explanation/build-overview.mdx | 20 +- docs/pages/cn/explanation/gas-waiver.mdx | 78 ++-- docs/pages/cn/explanation/tools-overview.mdx | 42 ++ docs/pages/cn/how-to/integrate-gas-waiver.mdx | 70 ++-- .../pages/cn/how-to/relay-with-gas-waiver.mdx | 49 +-- .../cn/how-to/self-hosted-gas-waiver.mdx | 49 +-- docs/pages/cn/reference/gas-waiver-api.mdx | 127 +++--- docs/pages/cn/reference/indexers.mdx | 136 ++++--- .../cn/reference/node-operations-overview.mdx | 64 +-- docs/pages/ko/explanation/build-overview.mdx | 24 +- docs/pages/ko/explanation/gas-waiver.mdx | 62 +-- docs/pages/ko/explanation/tools-overview.mdx | 41 ++ docs/pages/ko/how-to/integrate-gas-waiver.mdx | 68 ++-- .../pages/ko/how-to/relay-with-gas-waiver.mdx | 53 +-- .../ko/how-to/self-hosted-gas-waiver.mdx | 44 ++- docs/pages/ko/reference/gas-waiver-api.mdx | 131 ++++--- docs/pages/ko/reference/indexers.mdx | 132 ++++--- .../ko/reference/node-operations-overview.mdx | 62 +-- docs/sidebar.json | 368 +++++++++--------- 19 files changed, 916 insertions(+), 704 deletions(-) create mode 100644 docs/pages/cn/explanation/tools-overview.mdx create mode 100644 docs/pages/ko/explanation/tools-overview.mdx diff --git a/docs/pages/cn/explanation/build-overview.mdx b/docs/pages/cn/explanation/build-overview.mdx index f8e2648..a20f947 100644 --- a/docs/pages/cn/explanation/build-overview.mdx +++ b/docs/pages/cn/explanation/build-overview.mdx @@ -1,25 +1,25 @@ --- source_path: explanation/build-overview.mdx -source_sha: 4b19d1f913597181cd62426d9b82ef8e91c4fae3 -title: "概览" -description: "在 Stable 上推出产品:钱包和账户、支付、智能合约和 AI 代理。从快速入门开始,或者直接跳转到您需要的功能。" +source_sha: 31130e61141a3d529f2c5ec7281240aa4a155e00 +title: "概述" +description: "在 Stable 上发布:钱包和账户、支付、智能合约和 AI 代理。从快速入门开始,或者直接跳转到您需要的功能。" diataxis: "explanation" --- -# 概览 +# 概述 -Stable 新手?请先运行[快速入门](/cn/tutorial/quick-start)。它只需五分钟,并会发送一笔测试网交易,以便标签页的其余部分可以连接到它。 +Stable 新手?请先运行[快速入门](/cn/tutorial/quick-start)。它只需五分钟,并发送一个测试网交易,以便其余选项卡可以插入。 ## 探索 -- [**账户**](/cn/explanation/accounts-overview):创建钱包,使用 EIP-7702 授权 EOA,并为用户和代理限定会话密钥。 +- [**账户**](/cn/explanation/accounts-overview):创建钱包,使用 EIP-7702 委托 EOA,并为用户和代理设置会话密钥范围。 - [**支付**](/cn/explanation/payments-overview):发送 USDT0,构建 P2P 和订阅流程,使用 ERC-3009 结算发票,并使用 x402 为 API 定价。 -- [**合约**](/cn/explanation/contracts-overview):部署、验证和索引 Solidity 合约,并调用 Bank / Distribution / Staking 预编译。 +- [**合约**](/cn/explanation/contracts-overview):部署、验证和索引 Solidity 合约,并调用银行/分发/质押预编译。 - [**AI 和代理**](/cn/explanation/agent-settlement):将 MCP 服务器连接到 AI 客户端,并公开代理可以通过提示调用的 x402 付费工具。 ## 从这里开始 -- [**快速入门**](/cn/tutorial/quick-start):连接到测试网,为钱包注资,并发送您的第一笔 USDT0 交易。 -- [**发送您的第一笔 USDT0**](/cn/tutorial/send-usdt0):相同余额上的原生和 ERC-20 传输,附带 TypeScript 示例。 +- [**快速入门**](/cn/tutorial/quick-start):连接到测试网,为钱包注资,并发送您的第一个 USDT0 交易。 +- [**发送您的第一个 USDT0**](/cn/tutorial/send-usdt0):在同一余额上进行原生和 ERC-20 转账,并附带 TypeScript 示例。 - [**部署智能合约**](/cn/tutorial/smart-contract):搭建 Foundry,配置 Stable,并部署 Counter 合约。 -- [**Stable SDK**](/cn/explanation/sdk-overview):使用类型化的 TypeScript 客户端在 Stable 上进行转账、桥接和兑换。 +- [**工具和 SDK**](/cn/explanation/tools-overview):使用类型化的 TypeScript SDK、服务 API 和 MCP 服务器。 diff --git a/docs/pages/cn/explanation/gas-waiver.mdx b/docs/pages/cn/explanation/gas-waiver.mdx index 4cfa789..1aba12b 100755 --- a/docs/pages/cn/explanation/gas-waiver.mdx +++ b/docs/pages/cn/explanation/gas-waiver.mdx @@ -1,61 +1,73 @@ --- source_path: explanation/gas-waiver.mdx -source_sha: a03f510da6c1fe5ab2d31b55c8827b59792af6e0 -title: "免除Gas费" -description: "Gas费免除机制允许应用程序为用户支付Gas费。经治理批准的豁免提交封装交易,以零Gas费运行已签名负载。" +source_sha: 73109dcf0f466171e6c0807bb89627d896c640e0 +title: "Gas 豁免" +description: "Gas 豁免允许应用程序为用户支付 Gas 费。经治理批准的豁免提交包装器交易,以零 Gas 价格运行已签名的负载。" diataxis: "explanation" --- -# 免除Gas费 +# Gas 豁免 -经治理批准的地址(称为**豁免者**)提交一个封装交易,其中包含用户签名的负载,并以 `gasPrice = 0` 执行。用户不持有任何 USDT0 且不支付任何 Gas 费。Stable 运营着一个这样的豁免服务;合作伙伴也可以通过验证者治理注册他们自己的豁免地址。 +经治理批准的地址(称为**豁免者**)提交一个包装器交易,该交易携带用户签名的负载,并以 `gasPrice = 0` 执行它。用户不持有 USDT0 也不支付 Gas 费。Stable 运营一个这样的豁免服务作为托管服务;合作伙伴也可以通过验证者治理注册自己的豁免地址。 ## 工作原理 -Gas费免除机制采用封装交易模式: +Gas 豁免使用包装器交易模式: -1. **用户签署一个 `InnerTx`**,其中 `gasPrice = 0`。用户的签名端到端保留;豁免者不能在不使其失效的情况下修改负载。 -2. **豁免者将 `InnerTx` 封装到 `WrapperTx` 中**,发送到协议标记地址 (`0x000000000000000000000000000000000000f333`),其中 `value = 0`、`gasPrice = 0`,并将已签名的 `InnerTx` 作为其数据负载。 -3. **验证者检测到标记**,检查豁免者的授权和策略约束,并以用户的身份(`from`、`nonce`、调用语义)执行内部交易。 +1. **用户签署一个 `InnerTx`**,其中 `gasPrice = 0`。用户的签名在端到端过程中得到保留;豁免者不能修改负载而不使其失效。 +2. **豁免者将 `InnerTx` 包装成 `WrapperTx`**,发送到协议标记地址 (`0x000000000000000000000000000000000000f333`),其中 `value = 0`,`gasPrice = 0`,并将已签名的 `InnerTx` 作为其数据负载。 +3. **验证者检测到标记**,检查豁免者的授权和策略约束,并以用户的身份(`from`、`nonce`、调用语义)执行内部交易。 -Gas 费用核算在豁免机制内部处理。用户不支付任何费用;封装者不支付任何费用;验证者根据每个豁免者的策略承担成本。 +Gas 核算在豁免机制内部处理。用户不支付任何费用;包装器不支付任何费用;验证者根据每个豁免者的策略承担成本。 ## 授权和策略 -豁免者由验证者治理控制,而不是应用程序逻辑。治理提供: +豁免由验证者治理控制,而不是应用程序逻辑。治理提供: -- **可审查的注册**:每个豁免地址都在链上注册并且在状态中可见。 -- **撤销**:验证者可以随时移除行为不当的豁免者。 -- **通过 `AllowedTarget` 进行范围访问**:每个豁免者都绑定到一组特定的目标合约和方法选择器。如果内部 `to` 地址和方法选择器超出该范围,协议将拒绝任何封装。 +- **可审查的注册**:每个豁免地址都在链上注册,并在状态中可见。 +- **撤销**:验证者可以随时移除行为不当的豁免者。 +- **通过 `AllowedTarget` 进行范围访问**:每个豁免者都绑定到一组特定的目标合约和方法选择器。如果内部 `to` 地址和方法选择器超出该范围,协议将拒绝任何包装器。 -有效的封装交易满足以下所有条件: +有效的包装器交易满足以下所有条件: -- `WrapperTx.to == 0x000000000000000000000000000000000000f333`(标记地址)。 -- `WrapperTx.from` 是通过治理在链上注册的豁免者。 -- `WrapperTx.gasPrice == 0` 且 `InnerTx.gasPrice == 0`。 -- `WrapperTx.value == 0`。 -- `InnerTx.to` 和提取的方法选择器由豁免者的 `AllowedTarget` 策略允许。 +- `WrapperTx.to == 0x000000000000000000000000000000000000f333`(标记地址)。 +- `WrapperTx.from` 是通过治理在链上注册的豁免者。 +- `WrapperTx.gasPrice == 0` 且 `InnerTx.gasPrice == 0`。 +- `WrapperTx.value == 0`。 +- `InnerTx.to` 和提取的方法选择器由豁免者的 `AllowedTarget` 策略允许。 -如果任何条件失败,验证者将拒绝封装而不执行内部交易。 +如果任何条件失败,验证者将拒绝包装器,而不执行内部交易。 ## 安全模型 -- **用户签名完整性**:用户签署 `InnerTx`。豁免者不能在不使签名失效的情况下修改负载。合作伙伴仍有责任确保用户只签署预期的负载。 -- **链上授权**:授权存在于链上。只有治理注册的豁免地址才能提交有效的封装,无论请求源自何处。 -- **服务可用性边界**:当合作伙伴通过 Stable 托管的豁免服务器路由时,提交的可用性取决于服务。协议级别的授权保证不受影响。 +- **用户签名完整性**:用户签署 `InnerTx`。豁免者不能在不使签名无效的情况下修改负载。合作伙伴仍有责任确保用户只签署预期的负载。 +- **链上授权**:授权存在于链上。只有治理注册的豁免地址才能提交有效的包装器,无论请求源自何处。 +- **服务可用性边界**:当合作伙伴通过 Stable 的托管豁免服务器路由时,提交的可用性取决于服务。协议级别的授权保证不受影响。 -## 何时使用Gas费免除机制 +## 何时使用 Gas 豁免 -Gas费免除机制适用于任何用户不需要持有 USDT0 支付 Gas 费的场景: +Gas 豁免适用于任何最终用户无需持有 USDT0 支付 Gas 的流程: -- 消费者应用程序引导新用户,这些用户尚未持有稳定币余额。 -- 代理驱动的流程,其中代理的钱包支付 Gas 费。 -- 企业支付轨道,其中运营商承担网络成本。 +- 尚未拥有稳定币余额的消费者应用用户入门。 +- 由代理驱动的流程,其中代理的钱包为 Gas 提供资金。 +- 企业支付轨道,其中运营商承担网络成本。 -对于用户持有 USDT0 但希望将多个调用捆绑到一个签名交易的流程,请参阅[EIP-7702 委托](/cn/reference/eip-7702-api)代替。 +对于用户持有 USDT0 但希望将多个调用捆绑到一个签名交易中的流程,请参阅[EIP-7702 委托](/cn/reference/eip-7702-api)。 + +## 选择集成路径 + +所有三种路径都会产生相同的链上结果。它们在谁持有豁免密钥以及您构建多少方面有所不同。 + +| 路径 | 谁持有豁免密钥 | 何时使用 | +| :--- | :--- | :--- | +| [托管豁免服务器](/cn/how-to/integrate-gas-waiver) | Stable,您通过 API 密钥进行身份验证 | 您想要最短的路径,并且可以依赖 Stable 的服务进行提交。 | +| [企业 SDK](/cn/how-to/relay-with-gas-waiver) | 您,通过治理注册 | 您用 TypeScript 运行自己的豁免,并希望一次调用即可构建、签名和广播。 | +| [自托管包装器](/cn/how-to/self-hosted-gas-waiver) | 您,通过治理注册 | 您自己构建包装器交易,使用 SDK 不涵盖的语言。 | + +托管服务器为您注册并运营豁免,因此您无需构建 `WrapperTx`。两条自托管路径都需要一个经过治理注册的豁免地址,而 `@stablechain/enterprise` 是该模型的类型化客户端。 ## 下一步建议 -- [**启用免 Gas 费交易**](/cn/how-to/integrate-gas-waiver):通过 API 密钥提交和 NDJSON 响应集成托管的豁免服务器 API。 -- [**Gas 费免除协议**](/cn/reference/gas-waiver-api):阅读完整的协议规范:标记路由、封装格式、治理控制。 -- [**USDT0 作为 Gas**](/cn/explanation/usdt-as-gas-token):了解豁免涵盖的 Gas 令牌。 +- [**启用免 Gas 交易**](/cn/how-to/integrate-gas-waiver):集成托管豁免服务器 API,支持 API 密钥提交和 NDJSON 响应。 +- [**Gas 豁免协议**](/cn/reference/gas-waiver-api):阅读完整的协议规范:标记路由、包装器格式、治理控制。 +- [**USDT0 作为 Gas**](/cn/explanation/usdt-as-gas-token):了解豁免涵盖的 Gas 代币。 diff --git a/docs/pages/cn/explanation/tools-overview.mdx b/docs/pages/cn/explanation/tools-overview.mdx new file mode 100644 index 0000000..a507d44 --- /dev/null +++ b/docs/pages/cn/explanation/tools-overview.mdx @@ -0,0 +1,42 @@ +--- +source_path: explanation/tools-overview.mdx +source_sha: 6eecb794f859527309d0c200ea29e33c6223cb74 +title: "工具和 SDK" +description: "选择合适的 Stable 工具:类型化的 TypeScript SDK、Gas 费用豁免和 EIP-7702 服务 API,以及用于 AI 客户端的 MCP 服务器。" +diataxis: "explanation" +--- + +# 工具和 SDK + +所有你用来调用 Stable 的东西都在这里。要在 Stable 上构建产品?从 [Stable SDK](/cn/explanation/sdk-overview) 开始,当你需要 SDK 未封装的功能时,可以使用服务 API。为后端赞助 Gas 费用或中继交易?从 [Enterprise SDK](/cn/explanation/enterprise-sdk) 开始。将 Stable 集成到 AI 编辑器或代理中?请访问 [使用 AI 进行开发](/cn/how-to/develop-with-ai)。 + +## 使用 SDK 进行构建 + +- [**Stable SDK**](/cn/explanation/sdk-overview):`@stablechain/sdk`,用于转账、跨链桥接、兑换和 Vault 收益的类型化 TypeScript 客户端。它封装了 viem 并处理路由、批准、小数位和链切换。 +- [**SDK 快速入门**](/cn/tutorial/sdk-quickstart):安装软件包,在测试网上发送你的第一笔 USDT0 转账,并预览主网跨链桥报价。 +- [**SDK 参考**](/cn/reference/sdk) + :`createStable`、`createStableReader`、转账、跨链桥接、兑换和赚取方法、枚举和错误类。 +- [**Enterprise SDK**](/cn/explanation/enterprise-sdk):`@stablechain/enterprise`,用于免 Gas 交易和预留企业专用区块空间的服务器端客户端。 +- [**Enterprise SDK 参考**](/cn/reference/enterprise-sdk):`createStableEnterprise`、两种轨道、构建助手和错误类。 + +## 将 SDK 与你的技术栈结合使用 + +- [**viem**](/cn/how-to/sdk-with-viem):三种签名方式:私钥账户、浏览器传输或预构建的 viem WalletClient。 +- [**wagmi**](/cn/how-to/sdk-with-wagmi):使用 `useWalletClient`、`useAccount` 和 `useChainId` 将 SDK 连接到 React 应用中。 +- [**赚取收益**](/cn/how-to/earn-yield):将 USDT0 存入 Morpho Vault,读取 APY 和仓位,提款,并领取 Merkl 奖励。 + +## 服务 API + +- [**Gas 费用豁免协议**](/cn/reference/gas-waiver-api):交易格式、标记路由、治理控制以及你向其发布已签名 `InnerTx` 负载的 Waiver Server API。 +- [**EIP-7702**](/cn/reference/eip-7702-api):委托交易格式和 RPC 行为,用于将 EOA 的账户代码指向智能合约。 + +## AI 和代理工具 + +- [**使用 AI 进行开发**](/cn/how-to/develop-with-ai):将 Docs MCP 和 Runtime MCP 服务器添加到任何 MCP 兼容客户端,以及适用于不带 MCP 的工具的纯文本文档。 +- [**使用 MCP 服务器支付**](/cn/how-to/pay-with-mcp):将 x402 支付的 API 作为 MCP 工具公开,以便 AI 客户端通过提示调用和支付它们。 + +## 下一步 + +- [**快速入门**](/cn/tutorial/quick-start):连接到测试网,为钱包充值,并发送你的第一笔 USDT0 交易。 +- [**JSON-RPC API**](/cn/reference/json-rpc-api):`eth`、`net`、`web3` 和 `debug` 命名空间中支持的方法。 +- [**构建**](/cn/explanation/build-overview):账户、支付、合约和代理,按你正在发布的内容组织。 diff --git a/docs/pages/cn/how-to/integrate-gas-waiver.mdx b/docs/pages/cn/how-to/integrate-gas-waiver.mdx index d0921df..df99cb6 100644 --- a/docs/pages/cn/how-to/integrate-gas-waiver.mdx +++ b/docs/pages/cn/how-to/integrate-gas-waiver.mdx @@ -1,25 +1,25 @@ --- source_path: how-to/integrate-gas-waiver.mdx -source_sha: eaaf45d02173e1ce6279849d803d73014dbb7696 +source_sha: 29f1288293527b18488a9e502ed114dca6f9c690 title: "启用免Gas交易" -description: "通过向豁免服务器 API 提交已签名的 InnerTx 有效负载来集成 Stable Gas Waiver,以启用免 Gas 交易。" +description: "通过向Waiver Server API提交已签名的InnerTx负载,集成Stable Gas Waiver以启用免Gas交易。" diataxis: "how-to" --- # 启用免Gas交易 -Gas Waiver 可以在 Stable 上启用免 Gas 交易。通过 Gas Waiver,应用程序可以代表用户支付 Gas 费用,因此用户无需持有 USDT0 即可与合约进行交互。 +Gas Waiver 可以在 Stable 上实现免 Gas 交易。通过 Gas Waiver,应用程序可以代表用户支付 Gas 费用,因此用户无需持有 USDT0 即可与合约进行交互。 -本指南涵盖了通过豁免服务器 API 进行的集成。 +本指南涵盖了托管的 Waiver Server API,Stable 在其中操作 Waiver,您可以使用 API 密钥进行身份验证。要通过治理注册您自己的 Waiver 地址,请参阅[选择集成路径](/cn/explanation/gas-waiver#choosing-an-integration-path)。 :::note -**概念:** 有关 Gas Waiver 是什么、它为何存在以及治理授权豁免如何运作的信息,请参阅[Gas waiver](/cn/explanation/gas-waiver)。有关完整的协议规范(包装器交易格式、标记地址、执行语义、安全模型),请参阅[Gas waiver protocol](/cn/reference/gas-waiver-api)。 +**概念:** 有关 Gas Waiver 是什么、它为何存在以及治理授权的 Waiver 如何运作,请参阅[Gas Waiver](/cn/explanation/gas-waiver)。有关完整的协议规范(包装器交易格式、标记地址、执行语义、安全模型),请参阅[Gas Waiver 协议](/cn/reference/gas-waiver-api)。 ::: ## 前提条件 - 由 Stable 团队颁发的 Waiver Server API 密钥 -- 目标合约地址必须在豁免的 `AllowedTarget` 策略中注册 +- 目标合约地址必须在 Waiver 的 `AllowedTarget` 策略中注册 ## Waiver Server @@ -28,19 +28,19 @@ Gas Waiver 可以在 Stable 上启用免 Gas 交易。通过 Gas Waiver,应用 - 主网:待定 - 测试网:`https://waiver.testnet.stable.xyz` -**授权:** `Bearer ` +**授权:** `Bearer <您的API密钥>` ## 概述 -集成流程分为三个步骤: +集成流程分三步: -1. **构建 InnerTx**:用户使用 `gasPrice = 0` 签署交易。 -2. **提交到 Waiver Server**:将已签名的交易提交到 Waiver Server API。 -3. **处理响应**:豁免服务器封装并广播交易。处理流式结果并将交易哈希显示给用户。 +1. **构建 InnerTx**:用户使用 `gasPrice = 0` 签署交易。 +2. **提交到 Waiver Server**:将签名的交易提交到 Waiver Server API。 +3. **处理响应**:Waiver 服务器包装并广播交易。处理流式结果并将交易哈希显示给用户。 ## 步骤 1:创建用户的 InnerTx -用户使用 `gasPrice = 0` 签署标准交易。`to` 地址和方法选择器必须得到豁免的 `AllowedTarget` 策略的允许。 +用户签署一个 `gasPrice = 0` 的标准交易。`to` 地址和方法选择器必须经过 Waiver 的 `AllowedTarget` 策略许可。 ```typescript // config.ts @@ -88,7 +88,7 @@ const signedInnerTx = await userWallet.signTransaction(innerTx); ``` :::warning -`gasPrice` 必须为 `0`。如果它不为零,豁免服务器将拒绝该交易。 +`gasPrice` 必须为 `0`。如果非零,Waiver 服务器将拒绝该交易。 ::: ## 步骤 2:提交到 Waiver Server @@ -112,7 +112,7 @@ const response = await fetch(`${CONFIG.WAIVER_SERVER}/v1/submit`, { ### 批量提交 -您可以在单个请求中提交多个已签名的交易: +您可以在一个请求中提交多个已签名的交易: ```typescript body: JSON.stringify({ @@ -120,7 +120,7 @@ body: JSON.stringify({ }) ``` -每个结果行都包含一个 `index` 字段,对应于交易在数组中的位置。 +每行结果都包含一个 `index` 字段,对应于交易在数组中的位置。 ## 步骤 3:处理响应 @@ -160,26 +160,26 @@ while (true) { ## 错误代码 -| **代码** | **描述** | -| :--- | :--- | -| `PARSE_ERROR` | 无法解析交易 | -| `INVALID_REQUEST` | 请求正文格式错误 | -| `BATCH_SIZE_EXCEEDED` | 批量大小超出允许的最大值 | +| **代码** | **描述** | +| :------------------ | :------------------------ | +| `PARSE_ERROR` | 解析交易失败 | +| `INVALID_REQUEST` | 请求正文格式错误 | +| `BATCH_SIZE_EXCEEDED` | 批量大小超过允许的最大值 | | `VALIDATION_FAILED` | 交易验证失败(例如,签名无效,不允许的目标) | -| `BROADCAST_FAILED` | 无法广播到链上 | -| `RATE_LIMITED` | 超出速率限制 | -| `QUEUE_FULL` | 服务器队列已满 | -| `TIMEOUT` | 请求超时 | +| `BROADCAST_FAILED` | 广播到链失败 | +| `RATE_LIMITED` | 超出速率限制 | +| `QUEUE_FULL` | 服务器队列已满 | +| `TIMEOUT` | 请求超时 | -## API参考 +## API 参考 ### GET `/v1/health` -健康检查端点。认证:无。 +健康检查端点。身份验证:无。 ### POST `/v1/submit` -提交一批已签名的内部交易。认证:必需(Bearer)。 +提交一批已签名的内部交易。身份验证:必需(Bearer)。 **请求正文:** @@ -193,17 +193,17 @@ while (true) { ### GET `/v1/submit` -用于流式提交的 WebSocket 接口。认证:必需(Bearer)。 +用于流式提交的 WebSocket 接口。身份验证:必需(Bearer)。 ## 主要收获 -- Gas Waiver 是一种服务器端集成:您的后端将已签名的用户交易提交到 Waiver Server。用户从不直接与 Waiver Server 交互。 -- 用户始终签署 InnerTx,以保持签名的完整性。豁免无法修改用户的交易。 -- 目标合约必须在豁免的 `AllowedTarget` 列表中。 +- Gas Waiver 是一种服务器端集成:您的后端将签名的用户交易提交到 Waiver Server。用户永远不会直接与 Waiver Server 交互。 +- 用户始终签署 InnerTx,从而保持签名的完整性。Waiver 无法修改用户的交易。 +- 目标合约必须在 Waiver 的 `AllowedTarget` 列表中。 -## 下一步建议 +## 下一步推荐 -- [**零 Gas 交易**](/cn/how-to/zero-gas-transactions):查看以演示为中心的流程以及如何验证收据上的零 Gas。 -- [**自托管 Gas Waiver**](/cn/how-to/self-hosted-gas-waiver):运行您自己的豁免,无需托管 API。 +- [**零 Gas 交易**](/cn/how-to/zero-gas-transactions):查看以演示为重点的流程以及如何验证收据上的零 Gas。 +- [**自托管 Gas Waiver**](/cn/how-to/self-hosted-gas-waiver):无需托管 API 即可运行您自己的 Waiver。 - [**Gas Waiver 协议**](/cn/reference/gas-waiver-api):完整的包装器交易规范和治理模型。 -- [**Stable SDK**](/cn/explanation/sdk-overview):使用类型化客户端签署用户交易,然后将其提交到 Waiver Server。 +- [**通过 Gas Waiver 进行中继**](/cn/how-to/relay-with-gas-waiver):使用 Enterprise SDK 从您自己的治理注册 Waiver 赞助 Gas。 diff --git a/docs/pages/cn/how-to/relay-with-gas-waiver.mdx b/docs/pages/cn/how-to/relay-with-gas-waiver.mdx index c88b5db..1dc7e19 100644 --- a/docs/pages/cn/how-to/relay-with-gas-waiver.mdx +++ b/docs/pages/cn/how-to/relay-with-gas-waiver.mdx @@ -1,29 +1,29 @@ --- source_path: how-to/relay-with-gas-waiver.mdx -source_sha: a41b82da40c922244690f2e8e05d8f9ad1f34a99 +source_sha: 9bf96718a01faa7e956c91ad7f931816b6bc544e title: "使用 Gas 代付中继" -description: "通过 Enterprise SDK 赞助用户的 gas:中继零 gas 交易、批量中继、强制执行策略限制以及中继预签名交易。" +description: "使用 Enterprise SDK 赞助用户的 gas:中继零 gas 交易、批量中继、强制执行策略限制以及中继预签名交易。" diataxis: "how-to" --- # 使用 Gas 代付中继 -使用 `@stablechain/enterprise` 赞助您用户的 gas。白名单中的代付账户会包装用户的零 gas 交易(内部交易),并将其广播,这样用户就可以在不持有任何 USDT0 的情况下进行交易。`gasWaiver` 模块在一个调用中构建、签名和中继,因此您每个操作只需调用一个方法。 +使用 `@stablechain/enterprise` 赞助您用户的 gas。一个列入白名单的代付账户会封装用户的零 gas 交易(InnerTx)并广播它,这样用户无需持有任何 USDT0 即可进行交易。`gasWaiver` 模块在一个调用中完成构建、签名和中继,因此您可以为每个操作调用一个方法。 -每个方法都返回 `H_inner`,即用户交易的哈希,而不是携带它的包装器。 +每个方法都返回 `H_inner`,即用户交易的哈希,而不是承载它的封装器。 ## 先决条件 - Node.js 20 或更高版本,并安装了 `@stablechain/enterprise` 和 `viem`。请参阅 [Enterprise SDK 参考](/cn/reference/enterprise-sdk#install)。 -- 治理注册的代付密钥。Enterprise SDK 在 Stable 主网和 Stable 测试网上运行,访问受限:[联系 Stable](https://discord.gg/stablexyz) 获取白名单代付密钥。 +- 经过治理注册的代付密钥。Enterprise SDK 在 Stable 主网和 Stable 测试网上运行,访问受限:请[联系 Stable](https://discord.gg/stablexyz) 以获取白名单代付密钥。 :::warning -这是一个使用私钥进行签名的服务器端库。切勿在浏览器中运行它。请将代付密钥保存在您的后端。 +这是一个使用私钥进行签名的服务器端库。切勿在浏览器中运行它。将代付密钥保存在您的后端。 ::: ## 1. 使用 Gas 代付模块创建客户端 -将 `gasWaiver: { account }` 传递给 `createStableEnterprise`,其中 `account` 是您的白名单代付密钥。只有在配置后,模块才会在客户端上出现。 +将 `gasWaiver: { account }` 传递给 `createStableEnterprise`,其中 `account` 是您列入白名单的代付密钥。只有在您配置它时,该模块才会在客户端上出现。 ```ts import { createStableEnterprise, stable } from "@stablechain/enterprise"; @@ -41,7 +41,7 @@ const gw = enterprise.gasWaiver; StableEnterpriseClient { gasWaiver, guaranteedBlock: undefined, guaranteedWaiver: undefined } ``` -`rpcEndpoints` 选项是可选的。如果不设置,客户端将使用链的内置 RPC。 +`rpcEndpoints` 选项是可选的。如果未设置,客户端将使用链的内置 RPC。 :::tip 要将代付密钥保存在托管后端中,请传递 `signer` 而不是 `account`。来自 `@stablechain/enterprise/aws-kms` 的 `awsKmsSigner` 支持 AWS KMS。请参阅[签名密钥和托管](/cn/reference/enterprise-sdk#signing-keys-and-custody)。 @@ -49,7 +49,7 @@ StableEnterpriseClient { gasWaiver, guaranteedBlock: undefined, guaranteedWaiver ## 2. 中继单个交易 -使用用户账户和变化的字段调用 `send`。`gasPrice: 0`、遗留类型、`chainId` 和待处理 nonce 都已为您处理,因此您只需传递 `to`,以及可选的 `data`、`value` 和 `gas`。 +使用用户的账户和变化的字段调用 `send`。`gasPrice: 0`、旧版类型、`chainId` 和待处理 nonce 会为您处理,因此您只需传递 `to`,以及可选的 `data`、`value` 和 `gas`。 ```ts const user = privateKeyToAccount(process.env.USER_PRIVATE_KEY as `0x${string}`); @@ -62,11 +62,11 @@ console.log("H_inner:", txHash); H_inner: 0x8f3a...2d41 ``` -用户不需要 USDT0:代付账户赞助 gas。`gas` 默认为 `150_000n` (`DEFAULT_INNER_GAS`),足以覆盖代币转账或批准。对于更繁重的调用,请传递明确的 `gas`。 +用户不需要 USDT0:代付账户会赞助 gas。`gas` 默认为 `150_000n` (`DEFAULT_INNER_GAS`),足以覆盖代币转账或批准。对于更重的调用,请传递显式的 `gas`。 -## 3. 中继批处理 +## 3. 中继批量交易 -调用 `sendBatch` 中继来自一个账户的多个交易。Nonce 会从账户的待处理 nonce 自动排序,并且您会按照输入顺序获得每个输入的单个结果。 +调用 `sendBatch` 以中继来自一个账户的多个交易。Nonce 会根据账户的待处理 nonce 自动排序,并且您会按输入顺序获得每个输入的一个结果。 ```ts const results = await gw.sendBatch(user, [ @@ -84,11 +84,11 @@ for (const r of results) { [1] ✔ 0x2b7c...9e04 ``` -批处理会根据 `result.error` 报告每个项目的失败,而不是抛出异常,因此一个糟糕的交易不会导致其余交易失败。 +批量报告失败时,每个项目的错误都在 `result.error` 中,而不是抛出异常,因此一个糟糕的交易不会导致其余交易失败。 ## 4. 执行每个合作伙伴的策略限制 -通过在配置中添加策略限制来限制代付密钥可以赞助的内容。违反限制的内部交易会在广播前被拒绝。 +通过向配置添加策略限制来限制代付密钥可以赞助的内容。违反限制的 InnerTx 会在广播之前被拒绝。 ```ts const enterprise = createStableEnterprise({ @@ -104,16 +104,16 @@ const enterprise = createStableEnterprise({ }); ``` -目标合约不在 `allowedTargets` 中的交易将因 `TARGET_NOT_ALLOWED` 而失败;超过 `maxGasLimit` 的交易将因 `GAS_LIMIT_EXCEEDED` 而失败。使用 `"*"` 作为 `address` 允许任何合约,省略 `selectors` 允许任何方法。 +目标在 `allowedTargets` 之外的交易会失败并显示 `TARGET_NOT_ALLOWED`;超过 `maxGasLimit` 的交易会失败并显示 `GAS_LIMIT_EXCEEDED`。使用 `"*"` 作为 `address` 以允许任何合约,并省略 `selectors` 以允许任何方法。 ## 5. 中继预签名交易 -对于非托管流程,用户在其自己的环境中签署内部交易,并只将签名的十六进制字符串交给您,因此您永远不会看到他们的密钥。使用 `buildWaiverInnerTx` 构建它,然后使用 `relay` 中继它。 +对于非托管流程,用户在其自己的环境中签署 InnerTx 并仅将签名十六进制交给您,这样您就永远看不到他们的密钥。使用 `buildWaiverInnerTx` 构建它,然后使用 `relay` 中继它。 ```ts import { buildWaiverInnerTx, toSigner } from "@stablechain/enterprise"; -// 在用户端 — buildWaiverInnerTx 通过 Signer 签名;toSigner 适配 viem 账户 +// 在用户端 - buildWaiverInnerTx 通过 Signer 签名;toSigner 适配 viem 账户 const signed = await buildWaiverInnerTx(toSigner(user), stable.id, { to: token, data, gas: 150_000n, nonce }); // 在您的后端 @@ -129,7 +129,7 @@ H_inner: 0x8f3a...2d41 ## 处理拒绝 -`send` 和 `relay` 在拒绝时会抛出 `StableEnterpriseRelayError`,其中包含一个您可以进行分支判断的 `code`。 +`send` 和 `relay` 在拒绝时会抛出 `StableEnterpriseRelayError`,其中包含一个您可以根据其进行分支的 `code`。 ```ts import { StableEnterpriseRelayError } from "@stablechain/enterprise"; @@ -138,7 +138,7 @@ try { await gw.send(user, { to: token, data }); } catch (err) { if (err instanceof StableEnterpriseRelayError && err.code === "TARGET_NOT_ALLOWED") { - // 内部交易目标不在配置的允许列表中 + // InnerTx 目标不在配置的允许列表中 } throw err; } @@ -148,10 +148,11 @@ try { StableEnterpriseRelayError: relay failed [TARGET_NOT_ALLOWED]: target 0x... not allowed ``` -有关所有拒绝原因的完整信息,请参阅完整的 [`ErrorCode`](/cn/reference/enterprise-sdk#errorcode) 表。 +请参阅完整的 [`ErrorCode`](/cn/reference/enterprise-sdk#errorcode) 表格,了解所有拒绝原因。 -## 后续步骤 +## 接下来去哪里 -- [**发送保证交易**](/cn/how-to/send-guaranteed-transactions):在保留的 Enterprise 通道区块空间中发送交易,并结合 Gas 代付。 -- [**Enterprise SDK 参考**](/cn/reference/enterprise-sdk#relay-with-gas-waiver):所有方法、配置选项和错误类的完整信息。 -- [**Gas 代付**](/cn/explanation/gas-waiver):零 gas 交易在协议层如何工作。 +- [**发送担保交易**](/cn/how-to/send-guaranteed-transactions):将交易放入保留的 Enterprise-lane 区块空间,并将其与 gas 代付结合使用。 +- [**Enterprise SDK 参考**](/cn/reference/enterprise-sdk#relay-with-gas-waiver):所有方法、配置选项和错误类的完整说明。 +- [**Gas 代付**](/cn/explanation/gas-waiver):零 gas 交易在协议层面的工作原理。 +- [**启用无 gas 交易**](/cn/how-to/integrate-gas-waiver):使用 Stable 托管的代付服务器,而不是注册您自己的代付。 diff --git a/docs/pages/cn/how-to/self-hosted-gas-waiver.mdx b/docs/pages/cn/how-to/self-hosted-gas-waiver.mdx index c427ede..a220a5c 100644 --- a/docs/pages/cn/how-to/self-hosted-gas-waiver.mdx +++ b/docs/pages/cn/how-to/self-hosted-gas-waiver.mdx @@ -1,38 +1,43 @@ --- source_path: how-to/self-hosted-gas-waiver.mdx -source_sha: c054baff79a39314af7a4aaa087bd4525dfc7f12 -title: "自托管燃气费代付" -description: "在 Stable 上运行您自己的燃气费代付服务。通过治理注册代付地址,构建封装器交易,然后无需托管服务器即可广播它们。" +source_sha: 9954e27c1926c87e7fdb45e5c7543e56f6594250 +title: "自托管 Gas 豁免" +description: "在 Stable 上运行您自己的 Gas 豁免。通过治理注册豁免地址,构建封装交易,并广播它们,而无需托管服务器。" diataxis: "how-to" --- -# 自托管燃气费代付 -自托管燃气费代付让您可以操作自己的代付基础设施,而不是使用托管的Waiver Server API。您通过链上治理注册一个代付地址,然后直接向网络广播封装器交易。 +# 自托管 Gas 豁免 -本指南涵盖注册代付地址、收集已签名的用户交易、构建封装器交易以及广播它们。 +自托管 Gas 豁免允许您操作自己的豁免基础设施,而不是使用托管的豁免服务器 API。您通过链上治理注册一个豁免地址,然后直接向网络广播封装交易。 + +本指南涵盖了注册豁免地址、收集已签名的用户交易、构建封装交易以及广播它们。 :::note -**概念:** 关于燃气费代付是什么以及它为什么存在,请参阅[燃气费代付](/cn/explanation/gas-waiver)。有关完整的协议规范(封装器交易机制、授权、策略检查、执行语义、安全模型),请参阅[燃气费代付协议](/cn/reference/gas-waiver-api)。 +**概念:** 有关 Gas 豁免是什么以及为什么存在,请参阅[Gas 豁免](/cn/explanation/gas-waiver)。有关完整的协议规范(封装交易机制、授权、策略检查、执行语义、安全模型),请参阅[Gas 豁免协议](/cn/reference/gas-waiver-api)。 ::: -有关托管Waiver Server API集成路径,请参阅[启用免燃气费交易](/cn/how-to/integrate-gas-waiver)。 +有关托管的豁免服务器 API 集成路径,请参阅[启用免 Gas 交易](/cn/how-to/integrate-gas-waiver)。 + +:::tip +`@stablechain/enterprise` 在一次调用中针对相同的治理注册豁免完成了以下所有操作。如果您正在编写 TypeScript,请使用[使用 Gas 豁免进行中继](/cn/how-to/relay-with-gas-waiver),而不是手动构建封装交易。 +::: ## 先决条件 -- 一个通过验证者治理在链上注册的代付地址。 -- 为您的目标合约配置了`AllowedTarget`策略。 +- 通过验证器治理在链上注册的豁免地址。 +- 为您的目标合约配置了 `AllowedTarget` 策略。 -## 概览 +## 概述 自托管流程: -1. **收集已签名的 InnerTx**,其中用户的`gasPrice = 0`。 +1. **从用户那里收集已签名的 InnerTx**,其中 `gasPrice = 0`。 2. **构建 WrapperTx**:RLP 编码 InnerTx 并将其封装在发送到标记地址的交易中。 -3. **通过 `eth_sendRawTransaction` 广播** WrapperTx。 +3. 通过 `eth_sendRawTransaction` **广播** WrapperTx。 ## 步骤 1:收集用户的 InnerTx -用户签署一个`gasPrice = 0`的交易。`to`地址和方法选择器必须与您的代付的`AllowedTarget`策略匹配。 +用户签署一个 `gasPrice = 0` 的交易。`to` 地址和方法选择器必须与您的豁免的 `AllowedTarget` 策略匹配。 ```typescript // config.ts @@ -83,7 +88,7 @@ const signedInnerTx = await userWallet.signTransaction(innerTx); ## 步骤 2:构建 WrapperTx -RLP 编码已签名的 InnerTx 并将其封装在发送到标记地址的交易中。`gasLimit`必须覆盖内部执行和封装开销。 +RLP 编码已签名的 InnerTx 并将其封装在发送到标记地址的交易中。`gasLimit` 必须覆盖内部执行和封装开销。 ```typescript // constructWrapper.ts @@ -109,7 +114,7 @@ const signedWrapperTx = await waiverWallet.signTransaction(wrapperTx); ``` :::warning -`InnerTx.gasPrice`和`WrapperTx.gasPrice`都必须为`0`。`WrapperTx.value`也必须为`0`。如果这些条件中的任何一个不满足,验证者将拒绝该交易。 +`InnerTx.gasPrice` 和 `WrapperTx.gasPrice` 都必须为 `0`。`WrapperTx.value` 也必须为 `0`。如果这些条件中的任何一个不满足,验证器将拒绝该交易。 ::: ## 步骤 3:广播 @@ -132,12 +137,12 @@ Confirmed: true ## 主要收获 -- 自托管代付需要通过链上验证者治理注册一个代付地址。 -- WrapperTx 会发送到标记地址 (`0x...f333`),数据为 RLP 编码的 InnerTx。 -- InnerTx 和 WrapperTx 的 `gasPrice` 都必须为 `0`,且 `value` 也必须为 `0`。 +- 自托管豁免需要通过链上验证器治理注册的豁免地址。 +- WrapperTx 被发送到标记地址 (`0x...f333`),其中 RLP 编码的 InnerTx 作为数据。 +- InnerTx 和 WrapperTx 都必须具有 `gasPrice = 0` 和 `value = 0`。 ## 下一步建议 -- [**燃气费代付概念**](/cn/explanation/gas-waiver):在您自行运行之前,了解其机制。 -- [**燃气费代付协议**](/cn/reference/gas-waiver-api):参考完整的协议规范,了解标记路由、授权和执行语义。 -- [**启用免燃气费交易**](/cn/how-to/integrate-gas-waiver):使用托管的 Waiver Server API,而不是自行托管。 +- [**Gas 豁免概念**](/cn/explanation/gas-waiver):在您自己运行之前了解其机制。 +- [**Gas 豁免协议**](/cn/reference/gas-waiver-api):参考完整的协议规范,了解标记路由、授权和执行语义。 +- [**启用免 Gas 交易**](/cn/how-to/integrate-gas-waiver):使用托管的豁免服务器 API 而不是自托管。 diff --git a/docs/pages/cn/reference/gas-waiver-api.mdx b/docs/pages/cn/reference/gas-waiver-api.mdx index 2e2d757..1a8ca3c 100644 --- a/docs/pages/cn/reference/gas-waiver-api.mdx +++ b/docs/pages/cn/reference/gas-waiver-api.mdx @@ -1,89 +1,89 @@ --- source_path: reference/gas-waiver-api.mdx -source_sha: 73af0a88040bca94925046ff388ccc018e9be11b -title: "燃气费减免协议" -description: "燃气费减免的协议级规范:交易格式、标记路由、治理控制和减免服务器 API。" +source_sha: 341f351cae76b4a715d9d44be9ac3552dd059dd5 +title: "Gas 豁免协议" +description: "Gas 豁免的协议级规范:交易格式、标记路由、治理控制和豁免服务器 API。" diataxis: "reference" --- -# 燃气费减免协议 +# Gas 豁免协议 -本文档详细说明了燃气费减免机制:交易格式、标记路由、治理控制和减免服务器 API。 +本文档规定了 Gas 豁免机制:交易格式、标记路由、治理控制和豁免服务器 API。 :::note -**概念:** 有关燃气费减免是什么以及它存在的原因,请参阅[燃气费减免](/cn/explanation/gas-waiver)。有关与托管的减免服务器集成的操作指南,请参阅[启用免燃气费交易](/cn/how-to/integrate-gas-waiver)。 +**概念:** 有关 Gas 豁免是什么以及它为何存在,请参阅[Gas 豁免](/cn/explanation/gas-waiver)。有关与托管豁免服务器集成的操作指南,请参阅[启用免 Gas 交易](/cn/how-to/integrate-gas-waiver)。 ::: ## 摘要 -燃气费减免通过允许一小部分经治理批准的地址(“减免方”)提交 `gasPrice = 0` 的交易,从而在 Stable 上实现无燃气费的最终用户交易。Stable 目前运营着一个减免服务(“减免服务器”),您可以与之集成以提供无燃气费的用户体验,而无需实现协议特定的包装器逻辑。 +Gas 豁免通过允许一小组经治理批准的地址(“豁免者”)提交 `gasPrice = 0` 的交易,从而在 Stable 上实现免 Gas 的终端用户交易。Stable 目前运营一个豁免服务(“豁免服务器”),您可以与之集成以提供免 Gas UX,而无需实现协议特定的包装器逻辑。 ## 范围 本规范涵盖: -- 免燃气费交易的协议级规则 +- 免 Gas 交易的协议级规则 - 包装器交易机制和标记地址 - 治理控制的授权和允许的目标 -- 用于提交签名用户交易的减免服务器接口 +- 用于提交已签名用户交易的豁免服务器接口 ## 定义 -- **减免方(Waiver)**:通过验证者治理在链上注册的以太坊地址,被授权提交免燃气费交易。 -- **InnerTx**:最终用户签名的交易,`gasPrice = 0`。 -- **WrapperTx**:由减免方签名的一笔交易,将用户的 `InnerTx` 传输到链上并授权执行。 -- **标记地址(Marker address)**:用于识别减免包装器交易的哨兵地址:`0x000000000000000000000000000000000000f333`。 -- **允许目标(AllowedTarget)**:限制减免方到特定合约地址和方法选择器的策略。 +- **豁免者**:通过验证者治理在链上注册的以太坊地址,被授权提交免 Gas 交易。 +- **InnerTx**:终端用户签名的 `gasPrice = 0` 的交易。 +- **WrapperTx**:由豁免者签名,将用户的 `InnerTx` 传输到链上并授权执行的交易。 +- **标记地址**:用于标识豁免包装器交易的哨兵地址:`0x000000000000000000000000000000000000f333`。 +- **AllowedTarget**:将豁免者限制为特定合约地址和方法选择器的策略。 ## 概述 -燃气费减免使用包装器交易模式: +Gas 豁免使用包装器交易模式: 1. 用户用 `gasPrice = 0` 签署一个 `InnerTx`。 -2. 减免方将 `InnerTx` 包装到 `WrapperTx` 中并广播。 -3. 验证者检测标记交易,验证减免方的授权和策略约束,然后执行嵌入的 `InnerTx`。 +2. 豁免者将 `InnerTx` 包装到 `WrapperTx` 中并广播。 +3. 验证者检测标记交易,验证豁免者授权和策略约束,然后执行嵌入的 `InnerTx`。 -Stable 运营着一个减免服务(减免服务器),该服务在链上注册为授权减免方。您可以通过减免服务器 API 提交已签名的 `InnerTx` 有效负载。 +Stable 运营一个豁免服务(豁免服务器),该服务在链上注册为授权豁免者。您与豁免服务器 API 集成以提交已签名的 `InnerTx` 有效载荷。 ## 协议规范 ### 标记地址路由 -当且仅当发生以下情况时,交易才被视为减免包装器交易: +当且仅当满足以下条件时,交易才被视为豁免包装器交易: - `to == 0x000000000000000000000000000000000000f333`。 -协议将交易的 `data` 字段解释为编码的内部交易有效负载,并使用下面的减免验证规则进行处理。 +协议将交易的 `data` 字段解释为编码的内部交易有效载荷,并使用下面的豁免验证规则进行处理。 ### 授权和策略检查 对于每个候选包装器交易,验证者必须强制执行: -1. **减免方授权** - - `WrapperTx.from` 必须是通过治理在链上注册的减免地址。 -2. **燃气费减免** +1. **豁免者授权** + - `WrapperTx.from` 必须是通过治理在链上注册的豁免者地址。 +2. **Gas 豁免** - `WrapperTx.gasPrice` 必须等于 `0`。 - `InnerTx.gasPrice` 必须等于 `0`。 -3. **目标白名单** - - `InnerTx.to` 以及从 `InnerTx.data` 中提取的方法选择器必须由减免方的 `AllowedTarget` 策略允许。 +3. **目标允许列表** + - `InnerTx.to` 以及从 `InnerTx.data` 中提取的方法选择器必须被豁免者的 `AllowedTarget` 策略允许。 4. **价值限制** - `WrapperTx.value` 必须等于 `0`。 -如果任何检查失败,验证者将拒绝包装器交易,并且不执行内部交易。 +如果任何检查失败,验证者将拒绝包装器交易并且不执行内部交易。 ### 执行语义 如果所有检查都通过: -1. 协议以用户的身份执行 `InnerTx`,保留用户的 `from`、`nonce` 和调用语义。 -2. 燃气费核算由减免机制处理:用户不支付燃气费,并且根据该功能的定义,减免交易使用 `gasPrice = 0`。 +1. 协议以用户身份执行 `InnerTx`,保留用户的 `from`、`nonce` 和调用语义。 +2. Gas 核算由豁免机制处理:用户不支付 Gas,豁免交易根据功能定义使用 `gasPrice = 0`。 3. 包装器交易必须提供足够的 `gasLimit` 来覆盖 `InnerTx` 的执行(包括解包和验证的开销)。 ## 交易格式 ### WrapperTx -包装器交易由减免方签名并发送到标记地址。 +包装器交易由豁免者签名并发送到标记地址。 ```javascript WrapperTx { @@ -99,7 +99,7 @@ WrapperTx { ### InnerTx -内部交易由最终用户签名。 +内部交易由终端用户签名。 ```javascript InnerTx { @@ -115,41 +115,45 @@ InnerTx { ## 治理控制的访问 -减免授权由验证者治理在链上控制。 +豁免者授权由链上验证者治理控制。 治理控制提供: -- 对减免地址的可审查授权 -- 减免注册和更新的链上透明度 +- 豁免者地址的可审查授权 +- 豁免者注册和更新的链上透明度 - 撤销能力 -- 通过 `AllowedTarget` 进行的每个减免方的范围界定 +- 通过 `AllowedTarget` 进行的每个豁免者范围限制 ## 安全模型 -### 最终用户签名完整性 +### 终端用户签名完整性 -用户签署 `InnerTx`。减免方无法修改内部交易有效负载而使其签名失效。您仍然必须确保用户仅签署预期的交易有效负载。 +用户签署 `InnerTx`。豁免者无法修改内部交易有效载荷而不使签名失效。您仍然必须确保用户只签署预期的交易有效载荷。 ### 信任边界 -如果合作伙伴通过减免服务器路由提交内容,燃气费减免会引入服务依赖: +如果合作伙伴通过豁免服务器路由提交,Gas 豁免会引入服务依赖性: -- 服务的可用性影响提交无燃气费交易的能力。 -- 授权保留在链上;只有注册的减免地址才能生成有效的包装器提交。 +- 服务的可用性影响提交免 Gas 交易的能力。 +- 授权仍然在链上;只有注册的豁免者地址才能产生有效的包装器提交。 ## 集成 -您可以通过以下方式集成: +三种路径会产生相同的链上结果,不同之处在于谁持有豁免密钥。请参阅[选择集成路径](/cn/explanation/gas-waiver#choosing-an-integration-path)。 -1. 从用户收集签名的 `InnerTx`(`gasPrice = 0`)。 -2. 将签名的内部交易提交给减免服务器 API。 -3. 处理流式结果并将交易哈希显示给最终用户。 +针对托管豁免服务器: -## 减免服务器 +1. 从用户那里收集已签名的 `InnerTx` (`gasPrice = 0`)。 +2. 将已签名的内部交易提交给豁免服务器 API。 +3. 处理流式结果并将交易哈希显示给终端用户。 + +从您自己注册的豁免地址,`@stablechain/enterprise` 在一次调用中构建、签名和广播 `WrapperTx`。请参阅[使用 Gas 豁免进行中继](/cn/how-to/relay-with-gas-waiver),或[自托管 Gas 豁免](/cn/how-to/self-hosted-gas-waiver)以直接构建包装器。 + +## 豁免服务器 ### 概述 -减免服务器将签名的用户 `InnerTx` 有效负载包装并广播为减免方授权的包装器交易。您无需构建包装器交易或操作减免地址。 +豁免服务器将已签名的用户 `InnerTx` 有效载荷包装并广播为豁免者授权的包装器交易。您无需构建包装器交易或操作豁免地址。 ### 端点和基本 URL @@ -158,9 +162,9 @@ InnerTx { - 主网:待定 - 测试网:`https://waiver.testnet.stable.xyz` -### 身份验证 +### 认证 -除健康检查外的所有端点都需要 bearer token 身份验证: +除健康检查外,所有端点都需要持有者令牌认证: ```text Authorization: Bearer @@ -172,15 +176,15 @@ Authorization: Bearer 健康检查端点。 -身份验证:无。 +认证:无。 #### POST `/v1/submit` -提交一批签名的内部交易。 +提交一批已签名的内部交易。 -身份验证:必需(`Bearer`)。 +认证:需要 (`Bearer`)。 -请求体: +请求正文: ```json { @@ -188,7 +192,7 @@ Authorization: Bearer } ``` -响应以 NDJSON(换行符分隔的 JSON)流式传输。每行对应于一个已提交的交易索引。 +响应以 NDJSON(换行符分隔的 JSON)流式传输。每行对应一个提交的交易索引。 示例: @@ -201,7 +205,7 @@ Authorization: Bearer 用于流式提交的 WebSocket 接口。 -身份验证:必需(`Bearer`)。 +认证:需要 (`Bearer`)。 ### 集成示例 @@ -250,7 +254,7 @@ async function createInnerTx(userWallet, contractAddress, callData, nonce) { to: contractAddress, data: callData, value: value, - gasPrice: 0, // 减免必须为 0 + gasPrice: 0, // 豁免必须为 0 gasLimit: 100000, nonce: nonce, chainId: 2201, // 主网为 988,测试网为 2201 @@ -263,16 +267,17 @@ async function createInnerTx(userWallet, contractAddress, callData, nonce) { ### 错误代码 - `PARSE_ERROR`:解析交易失败 -- `INVALID_REQUEST`:请求体格式错误 -- `BATCH_SIZE_EXCEEDED`:批量大小超过允许的最大值 +- `INVALID_REQUEST`:请求正文格式错误 +- `BATCH_SIZE_EXCEEDED`:批处理大小超过允许的最大值 - `VALIDATION_FAILED`:交易验证失败 - `BROADCAST_FAILED`:广播到链失败 -- `RATE_LIMITED`:速率限制超出 +- `RATE_LIMITED`:速率限制已超出 - `QUEUE_FULL`:服务器队列已满 - `TIMEOUT`:请求超时 -## 下一步推荐 +## 下一步建议 -- [**零燃气费交易**](/cn/how-to/zero-gas-transactions):演示为主的演练,包含显示零燃气费的收据。 -- [**启用免燃气费交易**](/cn/how-to/integrate-gas-waiver):完整的托管 API 集成指南,包含批量提交和错误处理。 -- [**自托管燃气费减免**](/cn/how-to/self-hosted-gas-waiver):无需托管 API,运行您自己的燃气费减免基础设施。 +- [**零 Gas 交易**](/cn/how-to/zero-gas-transactions):以演示为中心的演练,显示零 Gas 费的收据。 +- [**启用免 Gas 交易**](/cn/how-to/integrate-gas-waiver):完整的托管 API 集成指南,包括批量提交和错误处理。 +- [**自托管 Gas 豁免**](/cn/how-to/self-hosted-gas-waiver):运行您自己的豁免基础设施,无需托管 API。 +- [**使用 Gas 豁免进行中继**](/cn/how-to/relay-with-gas-waiver):使用类型化的 Enterprise SDK 客户端从您自己的豁免赞助 Gas。 diff --git a/docs/pages/cn/reference/indexers.mdx b/docs/pages/cn/reference/indexers.mdx index 5e3cb91..452b7c9 100644 --- a/docs/pages/cn/reference/indexers.mdx +++ b/docs/pages/cn/reference/indexers.mdx @@ -1,6 +1,6 @@ --- source_path: reference/indexers.mdx -source_sha: 208d3664597b9263a10478a7fb3ad16384dffb53 +source_sha: 6cc9367a3209b641df9f4a6d11c8de08332c7ce5 title: "索引器" description: "查找支持 Stable 的索引、分析、合规和调查提供商。" diataxis: "reference" @@ -8,25 +8,26 @@ diataxis: "reference" # 索引器 -索引器、分析平台和区块链情报提供商帮助您查询链上数据、衡量活动、监控交易风险,并调查 Stable 上的资金流。Stable 兼容 EVM,因此标准的以太坊索引工具可以无缝工作。 +索引器、分析平台和区块链情报提供商可帮助您在 Stable 上查询链上数据、衡量活动、监控交易风险并调查资金流向。Stable 兼容 EVM,因此标准的以太坊索引工具无需修改即可使用。 -本页面列出了可用于 Stable 的索引、分析、合规性及调查的提供商。 +本页面列出了可用于 Stable 上的索引、分析、合规和调查的提供商。 ## 概览表 -| **提供商** | **类别** | **文档/入门** | **备注** | +| **提供商** | **类别** | **文档 / 开始使用** | **备注** | | :-------------------------------------------------------------------------- | :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------- | | [**Stablescan**](https://stablescan.xyz/) | 区块链浏览器 | [https://docs.etherscan.io/introduction](https://docs.etherscan.io/introduction) | 区块链浏览器;交易、区块和合约可见性。 | | [**Envio**](https://envio.dev/?utm_source=stable&utm_medium=partner-docs) | 索引器 | [https://docs.envio.dev/](https://docs.envio.dev/) | 通过单个 GraphQL API 提供实时和历史链上数据。 | -| [**The Graph**](https://thegraph.com/explorer/participants/indexers) | 索引器 | [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) | 使用 GraphQL 构建、部署和查询 subgraph。 | +| [**The Graph**](https://thegraph.com/explorer/participants/indexers) | 索引器 | [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) | 使用 GraphQL 构建、部署和查询子图。 | | [**Goldsky**](https://goldsky.com/) | 索引器 | [https://docs.goldsky.com/introduction](https://docs.goldsky.com/introduction) | 高性能索引和实时数据流。 | -| [**Ormi Labs**](https://ormilabs.com/) | 索引器 | [https://docs.ormilabs.com/subgraphs/quickstart](https://docs.ormilabs.com/subgraphs/quickstart) | 具有实时数据能力的新一代 subgraph 索引器。 | -| [**Allium**](https://www.allium.so/) | 分析/数据平台 | [https://docs.allium.so/](https://docs.allium.so/) | 规范化的区块链数据集和分析工具。 | -| [**CoinMarketCap**](https://coinmarketcap.com/api/) | 市场数据聚合器 | [https://coinmarketcap.com/api/documentation/v1/](https://coinmarketcap.com/api/documentation/v1/) | 市场价格、列表和追踪工具。 | -| [**CoinGecko**](https://www.coingecko.com/en/api) | 市场数据聚合器 | [https://docs.coingecko.com/](https://docs.coingecko.com/) | 带有开发者 API 的独立市场数据。 | -| [**Dexscreener**](https://docs.dexscreener.com/) | DEX 分析 | [https://docs.dexscreener.com/](https://docs.dexscreener.com/) | 实时 DEX 图表、流动性分析和仪表盘。 | -| [**DeBank**](https://debank.com/) | 投资组合/钱包分析 | [https://cloud.debank.com/](https://cloud.debank.com/) | EVM 钱包追踪、交易和投资组合洞察。 | -| [**Chainalysis**](https://www.chainalysis.com/) | 合规/调查 | [https://www.chainalysis.com/request-a-demo/](https://www.chainalysis.com/request-a-demo/) | 适用于 Stable 令牌的 KYT 监控、实体筛选和 Reactor 调查。 | +| [**Ormi Labs**](https://ormilabs.com/) | 索引器 | [https://docs.ormilabs.com/subgraphs/quickstart](https://docs.ormilabs.com/subgraphs/quickstart) | 具有实时数据能力的下一代子图索引器。 | +| [**SQD**](https://sqd.dev/chains/stable/) | 索引器 | [https://docs.sqd.dev/](https://docs.sqd.dev/) | 解码的历史和实时流;Stable 数据集按需提供。 | +| [**Allium**](https://www.allium.so/) | 分析 / 数据平台 | [https://docs.allium.so/](https://docs.allium.so/) | 标准化的区块链数据集和分析工具。 | +| [**CoinMarketCap**](https://coinmarketcap.com/api/) | 市场数据聚合器 | [https://coinmarketcap.com/api/documentation/v1/](https://coinmarketcap.com/api/documentation/v1/) | 市场价格、列表和跟踪工具。 | +| [**CoinGecko**](https://www.coingecko.com/en/api) | 市场数据聚合器 | [https://docs.coingecko.com/](https://docs.coingecko.com/) | 具有开发者 API 的独立市场数据。 | +| [**Dexscreener**](https://docs.dexscreener.com/) | DEX 分析 | [https://docs.dexscreener.com/](https://docs.dexscreener.com/) | 实时 DEX 图表、流动性分析和仪表板。 | +| [**DeBank**](https://debank.com/) | 投资组合 / 钱包分析 | [https://cloud.debank.com/](https://cloud.debank.com/) | EVM 钱包跟踪、交易和投资组合洞察。 | +| [**Chainalysis**](https://www.chainalysis.com/) | 合规 / 调查 | [https://www.chainalysis.com/request-a-demo/](https://www.chainalysis.com/request-a-demo/) | KYT 监控、实体筛选和针对 Stable 代币的 Reactor 调查。 | ## 1. 索引器 @@ -34,17 +35,17 @@ diataxis: "reference" ### Envio -Envio 是区块链应用程序的数据层。它通过单个 GraphQL API 提供实时和历史链上数据,具有原始高速访问和 Envio Cloud 上的托管服务。 +Envio 是区块链应用程序的数据层。它通过单个 GraphQL API 提供实时和历史链上数据,具有原始高速访问和在 Envio Cloud 上托管。 -**能力** +**功能** - 实时和历史链上数据 -- 具有原始高速访问的单个 GraphQL API -- 在 Envio Cloud 上托管 +- 具有原始高速访问权限的单个 GraphQL API +- 在 Envio Cloud 上进行托管 **文档** -Envio 的 HyperIndex 天生支持使用您自己的 RPC 作为数据源开箱即用地索引任何 EVM 链,包括 Stable。 +Envio 的 HyperIndex 本机支持索引任何 EVM 链,包括 Stable,开箱即用,使用您自己的 RPC 作为数据源。 [https://docs.envio.dev/](https://docs.envio.dev/) @@ -52,25 +53,25 @@ Envio 的 HyperIndex 天生支持使用您自己的 RPC 作为数据源开箱即 为超过 75,000 个项目提供数据访问的去中心化索引协议。 -**能力** +**功能** -- 适用于 Stable 的 Subgraph +- Stable 的子图 - 基于 GraphQL 的查询 - 分布式索引网络 **文档** -遵循此快速入门指南,在几分钟内创建、部署和查询 subgraph: +按照此快速入门指南在几分钟内创建、部署和查询子图: [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) ### Ormi Labs -Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链数据。 +Ormi 是下一代索引器,旨在大规模提供实时和历史区块链数据。 -**能力** +**功能** -- 链端索引 +- 链尖索引 - 亚秒级查询延迟 - 无代码功能 @@ -86,13 +87,13 @@ Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链 ### Goldsky -具有即时 subgraph 和开发人员工具的高性能索引平台。 +高性能索引平台,提供即时子图和开发者工具。 -**能力** +**功能** -- Subgraph 部署和管理 +- 子图部署和管理 - 用于实时事件流的 Webhook 创建 -- 多 subgraph 同步到外部数据库 +- 多子图同步到外部数据库 **文档** @@ -100,18 +101,49 @@ Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链 如需 24/7 支持,请联系 [support@goldsky.com](mailto:support@goldsky.com)。 +### SQD + +SQD 通过 Portal 提供 Stable 数据,Portal 是一个 HTTP 流 API,它返回解码的、模式类型化的表而不是原始链状态,因此您可以在不运行存档节点的情况下进行索引。需要自定义转换的团队使用 Squid 和 Pipes SDK 构建索引器,可自托管或在 SQD Cloud 上运行。 + +**功能** + +- 通过单个 HTTP 端点进行区块、交易和日志的历史和实时流 +- 覆盖 `stable-mainnet`(链 ID 988)和 `stable-testnet`(链 ID 2201)的已解码、模式化表 +- 用于自定义索引器的 Squid 和 Pipes SDK,具有用于 Postgres、ClickHouse、MongoDB、SQLite 和 Parquet 的连接器 +- 区块在到达 Portal 之前由 SQD Network 工作人员验证 + +:::note +Stable 数据集在 SQD 上是私有的。企业客户通过 SQD Private Portal 按请求获得访问权限,而不是通过公共网络。测试网覆盖范围从区块 39,381,701 开始,而不是创世区块。 +::: + +**文档** + +阅读 Stable 覆盖详情、数据集 slug 和端点: + +[https://sqd.dev/chains/stable/](https://sqd.dev/chains/stable/) + +从 Portal 流式传输解码数据: + +[https://docs.sqd.dev/en/portal/evm/quickstart](https://docs.sqd.dev/en/portal/evm/quickstart) + +使用 Pipes SDK 构建自定义索引器: + +[https://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstart](https://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstart) + +**开始使用**:[联系 SQD](https://sqd.dev/contact/) 以获取 Stable 数据集的访问权限,然后从 Portal 流式传输或指向 SDK 索引器。 + ## 2. 分析提供商 分析工具可帮助团队跟踪网络活动、实际支付、仪表板、使用流程和合约交互。 ### Allium -一个面向整个区块链生态系统工程师和分析师的基础数据平台。 +面向区块链生态系统中的工程师和分析师的基础数据平台。 -**能力** +**功能** -- 规范化的区块链数据集 -- 分析团队的查询工具 +- 标准化的区块链数据集 +- 面向分析团队的查询工具 - 企业数据基础设施 **文档** @@ -120,13 +152,13 @@ Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链 [https://www.allium.so/](https://www.allium.so/) -**入门**:在 [allium.so](https://www.allium.so/) 注册以获取 API 访问权限,然后使用 REST API 查询规范化的 Stable 链上数据集。 +**开始使用**:在 [allium.so](https://www.allium.so/) 注册以获取 API 访问权限,然后使用 REST API 查询标准化的 Stable 链上数据集。 ### CoinMarketCap 全球最大的加密资产市场跟踪平台。 -**能力** +**功能** - Stable 资产的价格跟踪 - 投资组合工具 @@ -138,17 +170,17 @@ Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链 [https://coinmarketcap.com/api/](https://coinmarketcap.com/api/) -**入门**:在 [coinmarketcap.com/api](https://coinmarketcap.com/api/) 注册 API 密钥,并通过 REST API 查询 Stable 资产价格和市场数据。 +**开始使用**:在 [coinmarketcap.com/api](https://coinmarketcap.com/api/) 注册一个 API 密钥,并通过 REST API 查询 Stable 资产价格和市场数据。 ### CoinGecko -全球最大的独立加密货币数据聚合器。 +全球最大的独立加密数据聚合器。 -**能力** +**功能** - 市场列表和价格数据 - 历史分析 -- 开发人员 API 访问 +- 面向开发者的 API 访问 **文档** @@ -156,31 +188,31 @@ Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链 [https://www.coingecko.com/en/api](https://www.coingecko.com/en/api) -**入门**:从 [coingecko.com/en/api](https://www.coingecko.com/en/api) 获取免费或专业 API 密钥,并通过 REST API 查询 Stable 代币价格和市场数据。 +**开始使用**:从 [coingecko.com/en/api](https://www.coingecko.com/en/api) 获取免费或专业版 API 密钥,并通过 REST API 查询 Stable 代币价格和市场数据。 ### Dexscreener -去中心化市场的实时图表和分析。 +去中心化场所的实时图表和分析。 -**能力** +**功能** - 实时 DEX 图表 -- 流动性和交易对分析 +- 流动性和配对分析 - 交易仪表板 **文档** -探索 Dexscreener 的 API 端点和开发人员工具: +探索 Dexscreener 的 API 端点和开发者工具: [https://docs.dexscreener.com/](https://docs.dexscreener.com/) -**入门**:浏览 [Dexscreener API 文档](https://docs.dexscreener.com/),查询基于 Stable 的 DEX 池的实时交易对数据、流动性和交易活动。 +**开始使用**:浏览 [Dexscreener API 文档](https://docs.dexscreener.com/),查询基于 Stable 的 DEX 池的实时配对数据、流动性和交易活动。 ### DeBank -以太坊和 EVM 生态系统的投资组合跟踪器。 +以太坊和 EVM 生态系统的投资组合追踪器。 -**能力** +**功能** - 钱包分析 - 交易摘要 @@ -192,31 +224,31 @@ Ormi 是一款下一代索引器,旨在大规模交付实时和历史区块链 [https://docs.debank.com/](https://docs.debank.com/) -**入门**:注册 [DeBank Cloud](https://cloud.debank.com/) 以获取 API 密钥,并查询 Stable 钱包余额、交易历史和投资组合数据。 +**开始使用**:注册 [DeBank Cloud](https://cloud.debank.com/) 以获取 API 密钥,并查询 Stable 钱包余额、交易历史和投资组合数据。 ## 3. 合规和调查 -合规和调查平台帮助团队监控交易风险并追踪链上资金流。 +合规和调查平台可帮助团队监控交易风险并追踪链上资金流向。 ### Chainalysis Chainalysis 通过其 [KYT](https://www.chainalysis.com/product/kyt/)、实体筛选产品和 [Reactor](https://www.chainalysis.com/product/reactor/) 支持 Stable。 -当部署在 Stable 上的新的可替代和不可替代代币遵循主要标准(如 ERC-20 和 ERC-721)时,它们将自动获得覆盖。 +在 Stable 上部署的新可互换代币和不可互换代币(例如遵循 ERC-20 和 ERC-721 等主要标准)会自动覆盖。 -**能力** +**功能** - 通过 KYT 对 Stable 代币进行持续监控和可操作警报 - 对 Stable 进行实体筛选 -- 跨 Stable 代币的资金流追踪和交易调查 +- 对 Stable 代币进行资金流向跟踪和交易调查 - 自动覆盖遵循 ERC-20 和 ERC-721 等标准的新代币 **文档** -阅读 [Stable 集成公告](https://www.chainalysis.com/blog/stable-automatic-token-support/)以获取覆盖详细信息。 +阅读 [Stable 集成公告](https://www.chainalysis.com/blog/stable-automatic-token-support/) 以了解覆盖详情。 [申请 Chainalysis 演示](https://www.chainalysis.com/request-a-demo/)。 --- -是否有集成 Stable 的索引、分析、合规或调查平台?请通过 [bizdev@stable.xyz](mailto:bizdev@stable.xyz) 联系我们。 +是否有集成了 Stable 的索引、分析、合规或调查平台?请通过 [bizdev@stable.xyz](mailto:bizdev@stable.xyz) 联系我们。 diff --git a/docs/pages/cn/reference/node-operations-overview.mdx b/docs/pages/cn/reference/node-operations-overview.mdx index c4e2bda..74b1401 100755 --- a/docs/pages/cn/reference/node-operations-overview.mdx +++ b/docs/pages/cn/reference/node-operations-overview.mdx @@ -1,71 +1,71 @@ --- source_path: reference/node-operations-overview.mdx -source_sha: 292d91190bd4c06f8a2e4e87f9253a9bb856c28a -title: "运维" -description: "运行 Stable 节点。安装、配置、监控与升级。" +source_sha: 834cf7cad55269092423973290344330f70a4a77 +title: "运行 Stable 节点" +description: "运行 Stable 节点。安装、配置、监控和升级。" diataxis: "reference" --- -# 运维 +# 运行 Stable 节点 -运维涵盖运行 Stable 节点的方方面面:全节点或归档节点、测试网或主网,从安装到监控。关于您的节点所强制执行的链级行为(费用模型、最终性、USDT0 作为 gas),请参阅 [Gas 定价](/cn/explanation/gas-pricing)、[最终性](/cn/explanation/finality) 和 [架构概览](/cn/explanation/core-optimization-overview)。 +本节介绍如何运行 Stable 节点:完整节点或归档节点,测试网或主网,从安装到监控。有关您的节点强制执行的链级行为(费用模型、最终性、USDT0 作为燃料),请参阅[燃料定价](/cn/explanation/gas-pricing)、[最终性](/cn/explanation/finality)和[架构概述](/cn/explanation/core-optimization-overview)。 ## 快速链接 - **[系统要求](/cn/reference/node-system-requirements)** - 不同节点类型的硬件和软件要求 -- **[安装指南](/cn/how-to/install-node)** - 各种平台的分步安装说明 +- **[安装指南](/cn/how-to/install-node)** - 针对各种平台的逐步安装说明 - **[配置](/cn/reference/node-configuration)** - 详细的配置选项和最佳实践 -- **[快照与同步](/cn/how-to/use-node-snapshots)** - 使用快照的快速同步选项 +- **[快照与同步](/cn/how-to/use-node-snapshots)** - 使用快照进行快速同步 - **[创建验证者](/cn/how-to/run-validator)** - 将已同步的节点注册为验证者并进行自委托 -- **[升级指南](/cn/how-to/upgrade-node)** - 节点升级流程和版本历史 -- **[监控](/cn/how-to/monitor-node)** - 节点监控的工具和指标 -- **[故障排查](/cn/how-to/troubleshoot-node)** - 常见问题和解决方案 +- **[升级指南](/cn/how-to/upgrade-node)** - 节点升级程序和版本历史记录 +- **[监控](/cn/how-to/monitor-node)** - 节点监控工具和指标 +- **[故障排除](/cn/how-to/troubleshoot-node)** - 常见问题和解决方案 -如需从链上读取验证者数据(质押、在线时长、投票历史)而不运行 `stabled`,请参阅 [索引验证者数据](/cn/how-to/index-validator-data)。 +要从链中读取验证者数据(权益、正常运行时间、投票历史),而不是运行 `stabled`,请参阅[索引验证者数据](/cn/how-to/index-validator-data)。 ## 节点类型 ### 全节点 全节点维护区块链的完整副本,并验证所有交易和区块。全节点: - 验证所有交易和区块 -- 维护整个区块链历史 -- 可以向其他节点提供数据 +- 维护完整的区块链历史 +- 可以为其他节点提供数据 - 支持网络的去中心化 ### 归档节点 -归档节点存储所有状态的完整历史,并能提供历史查询。归档节点: +归档节点存储所有状态的完整历史记录,并可以提供历史查询。归档节点: - 存储所有历史状态 -- 支持在任意区块高度进行历史查询 +- 支持任何区块高度的历史查询 - 需要显著更多的存储空间 -- 对区块浏览器和分析工具至关重要 +- 对于区块浏览器和分析至关重要 ## 网络信息 -如需完整的网络详情,包括 RPC 端点、区块浏览器和链参数,请参阅: +有关完整的网络详细信息,包括 RPC 端点、区块浏览器和链参数,请参阅: - **[主网](/cn/reference/mainnet-information)** - 主网详情 - **[测试网](/cn/reference/testnet-information)** - 测试网详情 ## 支持与社区 -- **Discord**:[加入 Stable Discord](https://discord.gg/stablexyz) +- **Discord**: [加入 Stable Discord](https://discord.gg/stablexyz) -## 快速开始 +## 快速入门 -面向希望快速上手的经验丰富的运维人员: +对于希望快速入门的经验丰富的操作员: -1. 查看 [系统要求](/cn/reference/node-system-requirements) -2. 遵循 [安装指南](/cn/how-to/install-node) -3. 使用 [配置指南](/cn/reference/node-configuration) 配置您的节点 -4. 通过 [快照](/cn/how-to/use-node-snapshots) 加快同步 -5. 使用 [监控指南](/cn/how-to/monitor-node) 监控您的节点 +1. 查看[系统要求](/cn/reference/node-system-requirements) +2. 遵循[安装指南](/cn/how-to/install-node) +3. 使用[配置指南](/cn/reference/node-configuration)配置您的节点 +4. 使用[快照](/cn/how-to/use-node-snapshots)加快同步 +5. 使用[监控指南](/cn/how-to/monitor-node)监控您的节点 -如需了解网络参数和 RPC 端点,请参阅 [主网信息](/cn/reference/mainnet-information) 或 [测试网信息](/cn/reference/testnet-information)。 +有关网络参数和 RPC 端点,请参阅[主网信息](/cn/reference/mainnet-information)或[测试网信息](/cn/reference/testnet-information)。 -## 节点运维如何与链关联 +## 节点运营商如何连接到链 -运行节点意味着强制执行 Stable 的链级规则。以下页面解释了您的节点所实现的行为: +运行节点意味着强制执行 Stable 的链级规则。这些页面解释了您的节点实现的行为: -- **[合约概览](/cn/explanation/contracts-overview)** 涵盖费用模型、JSON-RPC 接口以及您的节点所服务的系统模块。 -- **[最终性](/cn/explanation/finality)** 解释单槽最终性以及在共识层"已确认"的含义。 -- **[架构概览](/cn/explanation/core-optimization-overview)** 详细介绍共识、执行、数据库和 RPC 各层。 -- **[Gas 定价](/cn/explanation/gas-pricing)** 解释以 USDT0 计价的费用如何定价和收取。 +- **[合约概述](/cn/explanation/contracts-overview)** 涵盖了您的节点提供的费用模型、JSON-RPC 界面和系统模块。 +- **[最终性](/cn/explanation/finality)** 解释了单槽最终性以及共识层“已确认”的含义。 +- **[架构概述](/cn/explanation/core-optimization-overview)** 介绍了共识、执行、数据库和 RPC 层。 +- **[燃料定价](/cn/explanation/gas-pricing)** 解释了以 USDT0 计价的费用如何定价和收取。 diff --git a/docs/pages/ko/explanation/build-overview.mdx b/docs/pages/ko/explanation/build-overview.mdx index e8a19d1..1474a9c 100644 --- a/docs/pages/ko/explanation/build-overview.mdx +++ b/docs/pages/ko/explanation/build-overview.mdx @@ -1,25 +1,25 @@ --- source_path: explanation/build-overview.mdx -source_sha: 4b19d1f913597181cd62426d9b82ef8e91c4fae3 +source_sha: 31130e61141a3d529f2c5ec7281240aa4a155e00 title: "개요" -description: "Stable에서 출시: 지갑 및 계정, 결제, 스마트 계약 및 AI 에이전트. 빠른 시작으로 시작하거나 필요한 기능으로 바로 이동하세요." +description: "Stable에서 배포: 지갑 및 계정, 결제, 스마트 계약, AI 에이전트. 빠른 시작으로 시작하거나 필요한 기능으로 바로 이동하세요." diataxis: "explanation" --- # 개요 -Stable이 처음이신가요? 먼저 [빠른 시작](/ko/tutorial/quick-start)을 실행하세요. 5분이면 테스트넷 트랜잭션을 보낼 수 있어서 나머지 탭에 연결할 수 있습니다. +Stable이 처음이신가요? 먼저 [빠른 시작](/ko/tutorial/quick-start)을 실행하세요. 5분이면 완료되며 테스트넷 트랜잭션을 전송하여 나머지 탭에서 연결할 수 있도록 합니다. ## 탐색 -- [**계정**](/ko/explanation/accounts-overview): 지갑을 만들고, EIP-7702로 EOA를 위임하고, 사용자 및 에이전트의 세션 키를 범위 지정합니다. -- [**결제**](/ko/explanation/payments-overview): USDT0를 보내고, P2P 및 구독 흐름을 구축하고, ERC-3009로 인보이스를 정산하고, x402로 API 가격을 책정합니다. -- [**계약**](/ko/explanation/contracts-overview): Solidity 계약을 배포하고, 확인하고, 인덱싱하고, Bank/Distribution/Staking 사전 컴파일을 호출합니다. -- [**AI 및 에이전트**](/ko/explanation/agent-settlement): MCP 서버를 AI 클라이언트에 연결하고 프롬프트를 통해 에이전트가 호출할 수 있는 x402 유료 도구를 노출합니다. +- [**계정**](/ko/explanation/accounts-overview): 지갑 생성, EIP-7702를 사용한 EOA 위임, 사용자 및 에이전트용 세션 키 범위 지정. +- [**결제**](/ko/explanation/payments-overview): USDT0 전송, P2P 및 구독 흐름 구축, ERC-3009로 인보이스 정산, x402로 API 가격 책정. +- [**계약**](/ko/explanation/contracts-overview): Solidity 계약 배포, 확인 및 인덱싱, Bank / Distribution / Staking 사전 컴파일 호출. +- [**AI 및 에이전트**](/ko/explanation/agent-settlement): MCP 서버를 AI 클라이언트에 연결하고 에이전트가 프롬프트를 통해 호출할 수 있는 x402 유료 도구를 노출합니다. -## 여기부터 시작하세요 +## 여기에서 시작하세요 -- [**빠른 시작**](/ko/tutorial/quick-start): 테스트넷에 연결하고, 지갑에 자금을 지원하고, 첫 USDT0 트랜잭션을 보냅니다. -- [**첫 USDT0 보내기**](/ko/tutorial/send-usdt0): TypeScript 예제와 함께 동일한 잔액에 대한 기본 및 ERC-20 전송. -- [**스마트 계약 배포**](/ko/tutorial/smart-contract): Foundry를 스캐폴딩하고, Stable을 구성하고, Counter 계약을 배포합니다. -- [**Stable SDK**](/ko/explanation/sdk-overview): Stable에서 전송, 브리지 및 스왑을 위한 타입스크립트 클라이언트를 사용합니다. +- [**빠른 시작**](/ko/tutorial/quick-start): 테스트넷에 연결하고, 지갑에 자금을 지원하고, 첫 USDT0 트랜잭션을 전송합니다. +- [**첫 USDT0 전송**](/ko/tutorial/send-usdt0): TypeScript 예제와 함께 동일한 잔액에서 네이티브 및 ERC-20 전송. +- [**스마트 계약 배포**](/ko/tutorial/smart-contract): Foundry 스캐폴드, Stable 구성, Counter 계약 배포. +- [**도구 및 SDK**](/ko/explanation/tools-overview): 유형이 지정된 TypeScript SDK, 서비스 API, MCP 서버를 사용합니다. diff --git a/docs/pages/ko/explanation/gas-waiver.mdx b/docs/pages/ko/explanation/gas-waiver.mdx index 54b028f..4ac41b0 100755 --- a/docs/pages/ko/explanation/gas-waiver.mdx +++ b/docs/pages/ko/explanation/gas-waiver.mdx @@ -1,61 +1,73 @@ --- source_path: explanation/gas-waiver.mdx -source_sha: a03f510da6c1fe5ab2d31b55c8827b59792af6e0 +source_sha: 73109dcf0f466171e6c0807bb89627d896c640e0 title: "가스 면제" -description: "가스 면제를 통해 애플리케이션은 사용자의 가스를 부담할 수 있습니다. 거버넌스 승인을 받은 면제는 가스 가격이 0인 서명된 페이로드를 실행하는 래퍼 트랜잭션을 제출합니다." +description: "가스 면제를 통해 애플리케이션은 사용자를 위한 가스를 부담할 수 있습니다. 거버넌스 승인을 받은 면제는 가스 가격이 0인 상태에서 서명된 페이로드를 실행하는 래퍼 트랜잭션을 제출합니다." diataxis: "explanation" --- # 가스 면제 -거버넌스 승인을 받은 주소(이하 **면제 주소**)는 사용자가 서명한 페이로드를 포함하는 래퍼 트랜잭션을 `gasPrice = 0`으로 제출합니다. 사용자는 USDT0을 보유하지 않으며 가스를 지불하지 않습니다. Stable은 호스팅 서비스로 이러한 면제를 운영하며, 파트너는 검증자 거버넌스를 통해 자체 면제 주소를 등록할 수 있습니다. +거버넌스 승인을 받은 주소(이하 **면제자**)는 사용자의 서명된 페이로드를 포함하는 래퍼 트랜잭션을 제출하고, 이를 `gasPrice = 0`으로 실행합니다. 사용자는 USDT0을 보유하지 않으며 가스 비용을 지불하지 않습니다. Stable은 이러한 면제자 중 하나를 호스팅 서비스로 운영하며, 파트너는 검증자 거버넌스를 통해 자체 면제자 주소를 등록할 수도 있습니다. -## 동작 방식 +## 작동 방식 가스 면제는 래퍼 트랜잭션 패턴을 사용합니다. -1. **사용자는 `gasPrice = 0`으로 `InnerTx`에 서명합니다.** 사용자의 서명은 처음부터 끝까지 보존되며, 면제자는 유효성을 손상시키지 않고 페이로드를 수정할 수 없습니다. -2. **면제자는 `InnerTx`를 `WrapperTx`로 래핑합니다.** 이 `WrapperTx`는 프로토콜 마커 주소(`0x000000000000000000000000000000000000f333`)로 `value = 0`, `gasPrice = 0`, 그리고 서명된 `InnerTx`를 데이터 페이로드로 하여 전송됩니다. -3. **검증자는 마커를 감지하고**, 면제자의 승인 및 정책 제약을 확인한 후, 사용자의 ID(`from`, `nonce`, 호출 의미론)로 내부 트랜잭션을 실행합니다. +1. **사용자는 `gasPrice = 0`으로 `InnerTx`에 서명합니다.** 사용자의 서명은 처음부터 끝까지 보존되며, 면제자는 서명을 무효화하지 않고는 페이로드를 수정할 수 없습니다. +2. **면제자는 `InnerTx`를 `WrapperTx`로 래핑하여** 프로토콜 마커 주소(`0x000000000000000000000000000000000000f333`)로 보냅니다. 이때 `value = 0`, `gasPrice = 0`으로 설정하고 서명된 `InnerTx`를 데이터 페이로드로 사용합니다. +3. **검증자는 마커를 감지하고,** 면제자의 권한 및 정책 제약 조건을 확인한 후, 사용자의 신원( `from`, `nonce`, 호출 의미론)으로 내부 트랜잭션을 실행합니다. -가스 회계 처리는 면제 메커니즘 내에서 처리됩니다. 사용자는 아무것도 지불하지 않으며, 래퍼도 아무것도 지불하지 않으며, 검증자는 면제별 정책에 따라 비용을 부담합니다. +가스 회계는 면제 메커니즘 내부에서 처리됩니다. 사용자는 아무것도 지불하지 않고, 래퍼도 아무것도 지불하지 않으며, 검증자는 면제별 정책에 따라 비용을 흡수합니다. ## 승인 및 정책 -면제는 애플리케이션 로직이 아닌 검증자 거버넌스에 의해 제어됩니다. 거버넌스는 다음을 제공합니다. +면제자는 애플리케이션 로직이 아닌 검증자 거버넌스에 의해 제어됩니다. 거버넌스는 다음을 제공합니다. -- **검토 가능한 등록**: 모든 면제 주소는 온체인에 등록되어 상태에서 볼 수 있습니다. -- **철회**: 검증자는 언제든지 오작동하는 면제를 제거할 수 있습니다. -- **`AllowedTarget`을 통한 범위 지정 액세스**: 각 면제는 특정 대상 계약 및 메서드 선택자 집합에 바인딩됩니다. 프로토콜은 내부 `to` 주소와 메서드 선택자가 해당 범위를 벗어나는 래퍼를 거부합니다. +- **검토 가능한 등록**: 모든 면제자 주소는 온체인에 등록되며 상태에서 확인할 수 있습니다. +- **철회**: 검증자는 언제든지 오작동하는 면제자를 제거할 수 있습니다. +- **`AllowedTarget`을 통한 범위 지정 액세스**: 각 면제자는 특정 대상 계약 및 메서드 선택자 집합에 바인딩됩니다. 프로토콜은 내부 `to` 주소 및 메서드 선택자가 해당 범위를 벗어나는 모든 래퍼를 거부합니다. -유효한 래퍼 트랜잭션은 다음을 모두 만족해야 합니다. +유효한 래퍼 트랜잭션은 다음 조건을 모두 충족해야 합니다. - `WrapperTx.to == 0x000000000000000000000000000000000000f333` (마커 주소). - `WrapperTx.from`은 거버넌스를 통해 온체인에 등록된 면제자입니다. - `WrapperTx.gasPrice == 0` 및 `InnerTx.gasPrice == 0`. - `WrapperTx.value == 0`. -- `InnerTx.to` 및 추출된 메서드 선택자가 면제자의 `AllowedTarget` 정책에 의해 허용됩니다. +- `InnerTx.to`와 추출된 메서드 선택자가 면제자의 `AllowedTarget` 정책에 의해 허용됩니다. -어떤 조건이라도 실패하면 검증자는 내부 트랜잭션을 실행하지 않고 래퍼를 거부합니다. +어떤 조건이라도 실패하면, 검증자는 내부 트랜잭션을 실행하지 않고 래퍼를 거부합니다. ## 보안 모델 -- **사용자 서명 무결성**: 사용자가 `InnerTx`에 서명합니다. 면제자는 서명 유효성을 손상시키지 않고 페이로드를 변경할 수 없습니다. 파트너는 여전히 사용자가 의도한 페이로드에만 서명하도록 보장할 책임이 있습니다. -- **온체인 승인**: 승인은 온체인에 존재합니다. 요청의 출처에 관계없이 거버넌스에 등록된 면제 주소만 유효한 래퍼 제출을 생성할 수 있습니다. -- **서비스 가용성 경계**: 파트너가 Stable의 호스팅된 면제 서버를 통해 라우팅할 때, 제출 가용성은 서비스에 따라 달라집니다. 프로토콜 수준의 승인 보장은 영향을 받지 않습니다. +- **사용자 서명 무결성**: 사용자는 `InnerTx`에 서명합니다. 면제자는 서명을 무효화하지 않고는 페이로드를 변경할 수 없습니다. 파트너는 여전히 사용자가 의도한 페이로드에만 서명하도록 보장할 책임이 있습니다. +- **온체인 권한 부여**: 권한 부여는 온체인에 존재합니다. 요청의 출처에 관계없이 거버넌스에 등록된 면제자 주소만 유효한 래퍼 제출을 생성할 수 있습니다. +- **서비스 가용성 경계**: 파트너가 Stable의 호스팅된 면제 서버를 통해 라우팅할 때, 제출 가용성은 서비스에 따라 달라집니다. 프로토콜 수준의 권한 부여 보증은 영향을 받지 않습니다. ## 가스 면제를 사용해야 하는 경우 -가스 면제는 최종 사용자가 가스를 위해 USDT0을 보유할 필요가 없는 모든 흐름에 적합합니다. +가스 면제는 최종 사용자가 가스 비용으로 USDT0을 보유할 필요가 없는 모든 흐름에 적합합니다. - 아직 스테이블코인 잔액이 없는 사용자를 온보딩하는 소비자 앱. -- 에이전트의 지갑이 가스를 조달하는 에이전트 주도 흐름. -- 운영자가 네트워크 비용을 흡수하는 기업 결제 레일. +- 에이전트의 지갑이 가스 비용을 부담하는 에이전트 기반 흐름. +- 운영자가 네트워크 비용을 흡수하는 기업 결제 시스템. -사용자가 USDT0을 보유하고 있지만 여러 호출을 하나의 서명된 트랜잭션으로 묶으려는 흐름의 경우, [EIP-7702 위임](/ko/reference/eip-7702-api)을 참조하세요. +사용자가 USDT0을 보유하고 있지만 여러 호출을 하나의 서명된 트랜잭션으로 묶으려는 흐름의 경우, 대신 [EIP-7702 위임](/ko/reference/eip-7702-api)을 참조하십시오. + +## 통합 경로 선택 + +세 가지 경로 모두 동일한 온체인 결과를 생성합니다. 면제자 키를 누가 보유하고 얼마나 많은 것을 구축하느냐에 따라 달라집니다. + +| 경로 | 면제자 키를 보유한 주체 | 사용 시기 | +| :--- | :--- | :--- | +| [호스팅된 면제 서버](/ko/how-to/integrate-gas-waiver) | Stable, 그리고 API 키로 인증 | 가장 짧은 경로를 원하고 Stable의 서비스에 제출을 의존할 수 있는 경우. | +| [엔터프라이즈 SDK](/ko/how-to/relay-with-gas-waiver) | 귀하가 거버넌스를 통해 등록 | TypeScript에서 자체 면제자를 실행하고 빌드, 서명 및 브로드캐스트를 한 번의 호출로 처리하려는 경우. | +| [자체 호스팅 래퍼](/ko/how-to/self-hosted-gas-waiver) | 귀하가 거버넌스를 통해 등록 | SDK가 다루지 않는 언어로 직접 래퍼 트랜잭션을 구성하는 경우. | + +호스팅된 서버는 귀하를 대신하여 면제자를 등록하고 운영하므로 `WrapperTx`를 직접 구성할 필요가 없습니다. 자체 호스팅 경로는 모두 거버넌스에 등록된 면제자 주소가 필요하며, `@stablechain/enterprise`는 해당 모델을 위한 유형화된 클라이언트입니다. ## 다음 권장 사항 -- [**가스 없는 트랜잭션 활성화**](/ko/how-to/integrate-gas-waiver): 호스팅된 면제 서버 API를 API 키 제출 및 NDJSON 응답과 통합합니다. -- [**가스 면제 프로토콜**](/ko/reference/gas-waiver-api): 마커 라우팅, 래퍼 형식, 거버넌스 제어 등 전체 프로토콜 사양을 읽어보세요. -- [**USDT0을 가스로 사용**](/ko/explanation/usdt-as-gas-token): 면제가 적용되는 가스 토큰을 이해합니다. +- [**가스 없는 트랜잭션 활성화**](/ko/how-to/integrate-gas-waiver): API 키 제출 및 NDJSON 응답을 통해 호스팅된 면제 서버 API를 통합합니다. +- [**가스 면제 프로토콜**](/ko/reference/gas-waiver-api): 마커 라우팅, 래퍼 형식, 거버넌스 제어를 포함한 전체 프로토콜 사양을 읽어보십시오. +- [**가스 토큰으로서의 USDT0**](/ko/explanation/usdt-as-gas-token): 면제자가 커버하는 가스 토큰을 이해하십시오. diff --git a/docs/pages/ko/explanation/tools-overview.mdx b/docs/pages/ko/explanation/tools-overview.mdx new file mode 100644 index 0000000..94f2695 --- /dev/null +++ b/docs/pages/ko/explanation/tools-overview.mdx @@ -0,0 +1,41 @@ +--- +source_path: explanation/tools-overview.mdx +source_sha: 6eecb794f859527309d0c200ea29e33c6223cb74 +title: "도구 및 SDK" +description: "안정적인 도구를 선택하세요: 유형이 지정된 TypeScript SDK, 가스 면제 및 EIP-7702 서비스 API, AI 클라이언트를 위한 MCP 서버." +diataxis: "explanation" +--- + +# 도구 및 SDK + +Stable을 사용하여 호출하는 모든 것이 여기에 있습니다. Stable에서 제품을 구축하시겠습니까? [Stable SDK](/ko/explanation/sdk-overview)로 시작하고, SDK가 래핑하지 않는 레일이 필요할 때 서비스 API로 내려가세요. 가스를 후원하거나 백엔드에서 트랜잭션을 중계하시겠습니까? [Enterprise SDK](/ko/explanation/enterprise-sdk)로 시작하세요. Stable을 AI 편집기 또는 에이전트에 연결하시겠습니까? [AI로 개발하기](/ko/how-to/develop-with-ai)로 이동하세요. + +## SDK로 구축하기 + +- [**Stable SDK**](/ko/explanation/sdk-overview): `@stablechain/sdk`, 전송, 브릿지, 스왑 및 볼트 수익률을 위한 타입스크립트 클라이언트. viem을 래핑하고 라우팅, 승인, 소수점 및 체인 전환을 처리합니다. +- [**SDK 빠른 시작**](/ko/tutorial/sdk-quickstart): 패키지를 설치하고, 테스트넷에서 첫 USDT0 전송을 보내고, 메인넷 브릿지 견적을 미리 봅니다. +- [**SDK 참조**](/ko/reference/sdk): `createStable`, `createStableReader`, 전송, 브릿지, 스왑 및 수익 메서드, 열거형 및 오류 클래스. +- [**Enterprise SDK**](/ko/explanation/enterprise-sdk): `@stablechain/enterprise`, 가스 면제 트랜잭션 및 예약된 Enterprise-레인 블록 공간을 위한 서버 측 클라이언트. +- [**Enterprise SDK 참조**](/ko/reference/enterprise-sdk): `createStableEnterprise`, 두 레일, 빌드 도우미 및 오류 클래스. + +## 스택과 함께 SDK 사용하기 + +- [**viem**](/ko/how-to/sdk-with-viem): 세 가지 방식으로 서명합니다: 개인 키 계정, 브라우저 전송 또는 사전 구축된 viem WalletClient. +- [**wagmi**](/ko/how-to/sdk-with-wagmi): `useWalletClient`, `useAccount` 및 `useChainId`를 사용하여 SDK를 React 앱에 연결합니다. +- [**수익 창출**](/ko/how-to/earn-yield): Morpho 볼트에 USDT0를 예치하고, APY 및 포지션을 읽고, 인출하고, Merkl 보상을 청구합니다. + +## 서비스 API + +- [**가스 면제 프로토콜**](/ko/reference/gas-waiver-api): 트랜잭션 형식, 마커 라우팅, 거버넌스 제어 및 서명된 `InnerTx` 페이로드를 게시하는 Waiver Server API. +- [**EIP-7702**](/ko/reference/eip-7702-api): EOA의 계정 코드를 스마트 계약으로 지정하기 위한 위임 트랜잭션 형식 및 RPC 동작. + +## AI 및 에이전트 도구 + +- [**AI로 개발하기**](/ko/how-to/develop-with-ai): Docs MCP 및 Runtime MCP 서버를 모든 MCP 호환 클라이언트에 추가하고, MCP가 없는 도구를 위한 일반 텍스트 문서를 추가합니다. +- [**MCP 서버로 결제하기**](/ko/how-to/pay-with-mcp): x402 결제 API를 MCP 도구로 노출하여 AI 클라이언트가 프롬프트를 통해 호출하고 결제할 수 있도록 합니다. + +## 다음 단계 + +- [**빠른 시작**](/ko/tutorial/quick-start): 테스트넷에 연결하고, 지갑에 자금을 지원하고, 첫 USDT0 트랜잭션을 보냅니다. +- [**JSON-RPC API**](/ko/reference/json-rpc-api): `eth`, `net`, `web3` 및 `debug` 네임스페이스에서 지원되는 메서드. +- [**구축**](/ko/explanation/build-overview): 계정, 결제, 계약 및 에이전트를 배포하는 내용별로 정리했습니다. diff --git a/docs/pages/ko/how-to/integrate-gas-waiver.mdx b/docs/pages/ko/how-to/integrate-gas-waiver.mdx index 01796ac..1f86e16 100644 --- a/docs/pages/ko/how-to/integrate-gas-waiver.mdx +++ b/docs/pages/ko/how-to/integrate-gas-waiver.mdx @@ -1,27 +1,27 @@ --- source_path: how-to/integrate-gas-waiver.mdx -source_sha: eaaf45d02173e1ce6279849d803d73014dbb7696 +source_sha: 29f1288293527b18488a9e502ed114dca6f9c690 title: "가스 없는 트랜잭션 활성화" -description: "서명된 InnerTx 페이로드를 Waiver Server API에 제출하여 Stable Gas Waiver를 통합하여 가스 없는 트랜잭션을 활성화합니다." +description: "서명된 InnerTx 페이로드를 Waiver Server API에 제출하여 Stable 가스 면제를 통합하고 가스 없는 트랜잭션을 활성화하세요." diataxis: "how-to" --- # 가스 없는 트랜잭션 활성화 -Gas Waiver는 Stable에서 가스 없는 트랜잭션을 가능하게 합니다. Gas Waiver를 사용하면 애플리케이션이 사용자를 대신하여 가스 요금을 지불하므로 사용자는 가스 비용으로 USDT0를 보유하지 않고도 컨트랙트와 상호 작용할 수 있습니다. +가스 면제는 Stable에서 가스 없는 트랜잭션을 가능하게 합니다. 가스 면제를 통해 애플리케이션은 사용자를 대신하여 가스 요금을 부담하므로 사용자는 가스 비용으로 USDT0를 보유할 필요 없이 계약과 상호 작용할 수 있습니다. -이 가이드에서는 Waiver Server API를 통해 통합하는 방법을 다룹니다. +이 가이드는 Stable이 면제를 운영하고 API 키로 인증하는 호스팅된 Waiver Server API를 다룹니다. 대신 거버넌스를 통해 자체 면제 주소를 등록하려면 [통합 경로 선택](/ko/explanation/gas-waiver#choosing-an-integration-path)을 참조하십시오. :::note -**개념:** Gas Waiver가 무엇인지, 왜 존재하는지, 거버넌스 승인된 Waiver가 어떻게 작동하는지에 대해서는 [Gas waiver](/ko/explanation/gas-waiver)를 참조하십시오. 전체 프로토콜 사양(래퍼 트랜잭션 형식, 마커 주소, 실행 의미 체계, 보안 모델)에 대해서는 [Gas waiver protocol](/ko/reference/gas-waiver-api)을 참조하십시오. +**개념:** 가스 면제가 무엇인지, 왜 존재하는지, 거버넌스 승인 면제가 어떻게 작동하는지에 대한 자세한 내용은 [가스 면제](/ko/explanation/gas-waiver)를 참조하십시오. 전체 프로토콜 사양(래퍼 트랜잭션 형식, 마커 주소, 실행 의미 체계, 보안 모델)은 [가스 면제 프로토콜](/ko/reference/gas-waiver-api)을 참조하십시오. ::: -## 필수 조건 +## 전제 조건 -- Stable 팀이 발급한 Waiver Server용 API 키 -- 대상 컨트랙트 주소는 Waiver의 `AllowedTarget` 정책에 등록되어야 합니다. +- Stable 팀에서 발급한 Waiver 서버용 API 키 +- 대상 계약 주소는 면제의 `AllowedTarget` 정책에 등록되어야 합니다. -## Waiver Server +## Waiver 서버 **기본 URL:** @@ -34,19 +34,19 @@ Gas Waiver는 Stable에서 가스 없는 트랜잭션을 가능하게 합니다. 통합 흐름은 세 단계로 구성됩니다. -1. **InnerTx 빌드**: 사용자는 `gasPrice = 0`으로 트랜잭션에 서명합니다. -2. **Waiver Server에 제출**: 서명된 트랜잭션을 Waiver Server API에 제출합니다. -3. **응답 처리**: Waiver Server가 트랜잭션을 래핑하고 브로드캐스트합니다. 스트리밍된 결과를 처리하고 트랜잭션 해시를 사용자에게 표시합니다. +1. **InnerTx 빌드**: 사용자가 `gasPrice = 0`으로 트랜잭션에 서명합니다. +2. **Waiver 서버에 제출**: 서명된 트랜잭션을 Waiver Server API에 제출합니다. +3. **응답 처리**: 면제 서버가 트랜잭션을 래핑하고 브로드캐스트합니다. 스트리밍된 결과를 처리하고 트랜잭션 해시를 사용자에게 표시합니다. -## 1단계: 사용자의 InnerTx 생성 +## 1단계: 사용자 InnerTx 생성 -사용자는 `gasPrice = 0`으로 표준 트랜잭션에 서명합니다. `to` 주소와 메서드 선택기는 Waiver의 `AllowedTarget` 정책에 의해 허용되어야 합니다. +사용자는 `gasPrice = 0`으로 표준 트랜잭션에 서명합니다. `to` 주소와 메서드 선택기는 면제의 `AllowedTarget` 정책에 의해 허용되어야 합니다. ```typescript // config.ts export const CONFIG = { RPC_URL: "https://rpc.testnet.stable.xyz", - CHAIN_ID: 2201, // 메인넷의 경우 988 + CHAIN_ID: 2201, // 988 for mainnet WAIVER_SERVER: "https://waiver.testnet.stable.xyz", USDT0_ADDRESS: "0x78Cf24370174180738C5B8E352B6D14c83a6c9A9", }; @@ -88,10 +88,10 @@ const signedInnerTx = await userWallet.signTransaction(innerTx); ``` :::warning -`gasPrice`는 `0`이어야 합니다. 0이 아닌 경우 Waiver Server는 트랜잭션을 거부합니다. +`gasPrice`는 `0`이어야 합니다. 0이 아니면 면제 서버에서 트랜잭션을 거부합니다. ::: -## 2단계: Waiver Server에 제출 +## 2단계: Waiver 서버에 제출 ```typescript import { CONFIG } from "./config"; @@ -112,7 +112,7 @@ const response = await fetch(`${CONFIG.WAIVER_SERVER}/v1/submit`, { ### 배치 제출 -단일 요청으로 여러 개의 서명된 트랜잭션을 제출할 수 있습니다. +단일 요청으로 여러 서명된 트랜잭션을 제출할 수 있습니다. ```typescript body: JSON.stringify({ @@ -120,11 +120,11 @@ body: JSON.stringify({ }) ``` -각 결과 줄에는 배열 내 트랜잭션의 위치에 해당하는 `index` 필드가 포함됩니다. +각 결과 라인에는 배열에서 트랜잭션의 위치에 해당하는 `index` 필드가 포함됩니다. ## 3단계: 응답 처리 -응답은 NDJSON(줄바꿈으로 구분된 JSON)으로 스트리밍됩니다. 각 줄은 제출된 하나의 트랜잭션에 해당합니다. +응답은 NDJSON (줄 바꿈으로 구분된 JSON)으로 스트리밍됩니다. 각 줄은 제출된 하나의 트랜잭션에 해당합니다. ```typescript const reader = response.body.getReader(); @@ -162,16 +162,16 @@ while (true) { | **코드** | **설명** | | :--- | :--- | -| `PARSE_ERROR` | 트랜잭션 구문 분석 실패 | +| `PARSE_ERROR` | 트랜잭션 파싱 실패 | | `INVALID_REQUEST` | 잘못된 요청 본문 | | `BATCH_SIZE_EXCEEDED` | 배치 크기가 허용된 최대치를 초과함 | -| `VALIDATION_FAILED` | 트랜잭션 유효성 검사 실패 (예: 유효하지 않은 서명, 허용되지 않는 대상) | -| `BROADCAST_FAILED` | 체인으로 브로드캐스트 실패 | +| `VALIDATION_FAILED` | 트랜잭션 유효성 검사 실패 (예: 잘못된 서명, 허용되지 않는 대상) | +| `BROADCAST_FAILED` | 체인에 브로드캐스트 실패 | | `RATE_LIMITED` | 속도 제한 초과 | -| `QUEUE_FULL` | 서버 큐가 용량에 도달함 | +| `QUEUE_FULL` | 서버 큐가 가득 참 | | `TIMEOUT` | 요청 시간 초과 | -## API 레퍼런스 +## API 참조 ### GET `/v1/health` @@ -195,15 +195,15 @@ while (true) { 스트리밍 제출을 위한 WebSocket 인터페이스. 인증: 필수 (Bearer). -## 요점 +## 주요 요점 -- Gas Waiver는 서버 측 통합입니다. 백엔드가 서명된 사용자 트랜잭션을 Waiver Server에 제출합니다. 사용자는 Waiver Server와 직접 상호 작용하지 않습니다. -- 사용자는 항상 InnerTx에 서명하여 서명 무결성을 보존합니다. Waiver는 사용자의 트랜잭션을 수정할 수 없습니다. -- 대상 컨트랙트는 Waiver의 `AllowedTarget` 목록에 있어야 합니다. +- 가스 면제는 서버 측 통합입니다. 백엔드가 서명된 사용자 트랜잭션을 Waiver 서버에 제출합니다. 사용자는 Waiver 서버와 직접 상호 작용하지 않습니다. +- 사용자는 항상 InnerTx에 서명하여 서명 무결성을 유지합니다. 면제는 사용자 트랜잭션을 수정할 수 없습니다. +- 대상 계약은 면제의 `AllowedTarget` 목록에 있어야 합니다. -## 다음에 권장되는 내용 +## 다음 권장 사항 -- [**제로 가스 트랜잭션**](/ko/how-to/zero-gas-transactions): 데모 중심 흐름과 영수증에서 제로 가스를 확인하는 방법을 참조하십시오. -- [**셀프 호스팅 Gas Waiver**](/ko/how-to/self-hosted-gas-waiver): 호스팅된 API 없이 자체 Waiver를 실행합니다. -- [**Gas Waiver 프로토콜**](/ko/reference/gas-waiver-api): 전체 래퍼 트랜잭션 사양 및 거버넌스 모델. -- [**Stable SDK**](/ko/explanation/sdk-overview): 유형이 지정된 클라이언트를 사용하여 Waiver Server에 제출할 사용자 트랜잭션에 서명합니다. +- [**제로 가스 트랜잭션**](/ko/how-to/zero-gas-transactions): 데모 중심 흐름과 영 가스를 영수증에서 확인하는 방법을 참조하세요. +- [**자체 호스팅 가스 면제**](/ko/how-to/self-hosted-gas-waiver): 호스팅된 API 없이 자체 면제를 실행하세요. +- [**가스 면제 프로토콜**](/ko/reference/gas-waiver-api): 전체 래퍼 트랜잭션 사양 및 거버넌스 모델. +- [**가스 면제로 릴레이**](/ko/how-to/relay-with-gas-waiver): Enterprise SDK를 사용하여 자체 거버넌스 등록 면제에서 가스를 후원하세요. diff --git a/docs/pages/ko/how-to/relay-with-gas-waiver.mdx b/docs/pages/ko/how-to/relay-with-gas-waiver.mdx index 6ddcff9..8e3dfa2 100644 --- a/docs/pages/ko/how-to/relay-with-gas-waiver.mdx +++ b/docs/pages/ko/how-to/relay-with-gas-waiver.mdx @@ -1,29 +1,29 @@ --- source_path: how-to/relay-with-gas-waiver.mdx -source_sha: a41b82da40c922244690f2e8e05d8f9ad1f34a99 +source_sha: 9bf96718a01faa7e956c91ad7f931816b6bc544e title: "가스 면제 릴레이" -description: "Enterprise SDK로 사용자 가스 지원: 제로 가스 트랜잭션 릴레이, 배치 릴레이, 정책 제한 적용, 미리 서명된 트랜잭션 릴레이." +description: "Enterprise SDK로 사용자의 가스 요금을 후원하세요: 제로 가스 트랜잭션 릴레이, 배치 릴레이, 정책 한도 적용, 사전 서명된 트랜잭션 릴레이." diataxis: "how-to" --- # 가스 면제 릴레이 -`@stablechain/enterprise`로 사용자 가스를 지원하세요. 화이트리스트에 등록된 면제 계정은 사용자의 제로 가스 트랜잭션(InnerTx)을 래핑하고 브로드캐스트하여 사용자가 USDT0를 보유하지 않고도 트랜잭션을 수행할 수 있도록 합니다. `gasWaiver` 모듈은 빌드, 서명 및 릴레이를 한 번의 호출로 처리하므로 작업당 하나의 메서드를 호출합니다. +`@stablechain/enterprise`를 사용하여 사용자의 가스를 후원하세요. 화이트리스트에 등록된 면제 계정은 사용자의 제로 가스 트랜잭션(InnerTx)을 래핑하여 브로드캐스트하므로, 사용자는 USDT0를 보유하지 않고도 트랜잭션을 수행할 수 있습니다. `gasWaiver` 모듈은 한 번의 호출로 빌드, 서명 및 릴레이를 수행하므로, 각 작업당 하나의 메서드를 호출합니다. -모든 메서드는 트랜잭션을 전달한 래퍼가 아닌, 사용자 트랜잭션의 해시인 `H_inner`를 반환합니다. +모든 메서드는 사용자의 트랜잭션 해시인 `H_inner`를 반환하며, 이를 전달한 래퍼는 반환하지 않습니다. ## 전제 조건 -- Node.js 20 이상, `@stablechain/enterprise` 및 `viem` 설치. [Enterprise SDK 참조](/ko/reference/enterprise-sdk#install)를 참조하세요. -- 거버넌스에 등록된 면제 키. Enterprise SDK는 Stable Mainnet 및 Stable Testnet에서 실행되며 액세스는 제한됩니다. 화이트리스트에 등록된 면제 키를 얻으려면 [Stable에 문의](https://discord.gg/stablexyz)하세요. +- Node.js 20 이상, 그리고 `@stablechain/enterprise`와 `viem`이 설치되어 있어야 합니다. [Enterprise SDK 참조](/ko/reference/enterprise-sdk#install)를 참조하세요. +- 거버넌스에 등록된 면제 키. Enterprise SDK는 Stable Mainnet 및 Stable Testnet에서 실행되며, 액세스가 제한됩니다. 화이트리스트에 등록된 면제 키를 받으려면 [Stable에 문의](https://discord.gg/stablexyz)하세요. :::warning -이것은 개인 키로 서명하는 서버 측 라이브러리입니다. 브라우저에서 실행하지 마십시오. 면제 키는 백엔드에 보관하십시오. +이것은 개인 키로 서명하는 서버 측 라이브러리입니다. 브라우저에서 실행하지 마세요. 면제 키는 백엔드에 보관하세요. ::: ## 1. 가스 면제 모듈로 클라이언트 생성 -`createStableEnterprise`에 `gasWaiver: { account }`를 전달합니다. 여기서 `account`는 화이트리스트에 등록된 면제 키입니다. 모듈은 구성할 때만 클라이언트에 존재합니다. +`gasWaiver: { account }`를 `createStableEnterprise`에 전달합니다. 여기서 `account`는 화이트리스트에 등록된 면제 키입니다. 모듈은 구성할 때만 클라이언트에 존재합니다. ```ts import { createStableEnterprise, stable } from "@stablechain/enterprise"; @@ -44,12 +44,12 @@ StableEnterpriseClient { gasWaiver, guaranteedBlock: undefined, guaranteedWaiver `rpcEndpoints` 옵션은 선택 사항입니다. 설정하지 않으면 클라이언트는 체인의 내장 RPC를 사용합니다. :::tip -면제 키를 보관 백엔드에 보관하려면 `account` 대신 `signer`를 전달하세요. `@stablechain/enterprise/aws-kms`의 `awsKmsSigner`는 AWS KMS로 이를 지원합니다. [서명 키 및 보관](/ko/reference/enterprise-sdk#signing-keys-and-custody)을 참조하세요. +면제 키를 보관 백엔드에 유지하려면 `account` 대신 `signer`를 전달하세요. `@stablechain/enterprise/aws-kms`의 `awsKmsSigner`는 AWS KMS로 이를 지원합니다. [서명 키 및 보관](/ko/reference/enterprise-sdk#signing-keys-and-custody)을 참조하세요. ::: ## 2. 단일 트랜잭션 릴레이 -사용자 계정과 변경되는 필드를 사용하여 `send`를 호출합니다. `gasPrice: 0`, 레거시 유형, `chainId` 및 보류 중인 nonce는 자동으로 처리되므로 `to`만 전달하고 선택적으로 `data`, `value`, `gas`를 전달합니다. +사용자 계정과 가변 필드를 사용하여 `send`를 호출합니다. `gasPrice: 0`, 레거시 유형, `chainId`, 그리고 보류 중인 nonce는 자동으로 처리되므로, `to`만 전달하고 선택적으로 `data`, `value`, `gas`를 전달합니다. ```ts const user = privateKeyToAccount(process.env.USER_PRIVATE_KEY as `0x${string}`); @@ -62,11 +62,11 @@ console.log("H_inner:", txHash); H_inner: 0x8f3a...2d41 ``` -사용자는 USDT0가 필요하지 않습니다. 면제 계정이 가스를 지원합니다. `gas`는 토큰 전송 또는 승인을 처리하는 `150_000n`(`DEFAULT_INNER_GAS`)으로 기본 설정됩니다. 더 많은 호출에는 명시적인 `gas`를 전달하세요. +사용자는 USDT0가 필요하지 않습니다. 면제 계정이 가스를 후원합니다. `gas`는 토큰 전송 또는 승인을 처리하는 `150_000n`(`DEFAULT_INNER_GAS`)으로 기본 설정됩니다. 더 많은 가스를 사용하는 호출에는 명시적인 `gas`를 전달하세요. ## 3. 배치 릴레이 -`sendBatch`를 호출하여 하나의 계정에서 여러 트랜잭션을 릴레이합니다. Nonce는 계정의 보류 중인 nonce에서 자동으로 순서가 지정되며, 입력 순서대로 입력당 하나의 결과를 얻습니다. +`sendBatch`를 호출하여 하나의 계정에서 여러 트랜잭션을 릴레이합니다. Nonce는 계정의 보류 중인 nonce에서 자동으로 시퀀싱되며, 입력 순서대로 입력당 하나의 결과를 얻습니다. ```ts const results = await gw.sendBatch(user, [ @@ -84,11 +84,11 @@ for (const r of results) { [1] ✔ 0x2b7c...9e04 ``` -배치는 예외를 던지는 대신 `result.error`의 항목별로 실패를 보고하므로 하나의 잘못된 트랜잭션이 나머지를 망치지 않습니다. +배치는 예외를 발생시키는 대신 `result.error`에 항목별 실패를 보고하므로, 하나의 잘못된 트랜잭션이 나머지를 망가뜨리지 않습니다. -## 4. 파트너별 정책 제한 적용 +## 4. 파트너별 정책 한도 적용 -구성 파일에 정책 제한을 추가하여 면제 키가 지원할 수 있는 대상을 제한합니다. 제한을 위반하는 InnerTx는 브로드캐스트되기 전에 거부됩니다. +정책 한도를 구성에 추가하여 면제 키가 후원할 수 있는 항목을 제한합니다. 한도를 위반하는 InnerTx는 브로드캐스트 전에 거부됩니다. ```ts const enterprise = createStableEnterprise({ @@ -98,25 +98,25 @@ const enterprise = createStableEnterprise({ maxGasLimit: 500_000n, maxDataLength: 4_096, allowedTargets: [ - { address: token, selectors: ["0xa9059cbb"] }, // ERC-20 transfer only + { address: token, selectors: ["0xa9059cbb"] }, // ERC-20 전송만 ], }, }); ``` -`allowedTargets` 외부의 컨트랙트로의 트랜잭션은 `TARGET_NOT_ALLOWED` 오류로 실패하고, `maxGasLimit`을 초과하는 트랜잭션은 `GAS_LIMIT_EXCEEDED` 오류로 실패합니다. `address`에 `"*"`를 사용하여 모든 컨트랙트를 허용하고, `selectors`를 생략하여 모든 메서드를 허용할 수 있습니다. +`allowedTargets` 외의 계약으로의 트랜잭션은 `TARGET_NOT_ALLOWED` 오류와 함께 실패합니다. `maxGasLimit`을 초과하는 트랜잭션은 `GAS_LIMIT_EXCEEDED` 오류와 함께 실패합니다. `address`로 `"*"`를 사용하여 모든 계약을 허용하고, `selectors`를 생략하여 모든 메서드를 허용할 수 있습니다. -## 5. 미리 서명된 트랜잭션 릴레이 +## 5. 사전 서명된 트랜잭션 릴레이 -비관리 흐름의 경우, 사용자는 자신의 환경에서 InnerTx에 서명하고 서명된 hex만 제공하므로 사용자의 키를 볼 필요가 없습니다. `buildWaiverInnerTx`로 빌드한 다음 `relay`로 릴레이합니다. +비관리형 흐름의 경우, 사용자는 자신의 환경에서 InnerTx에 서명하고 서명된 헥스만 제공하므로, 사용자의 키를 볼 필요가 없습니다. `buildWaiverInnerTx`로 빌드한 다음 `relay`로 릴레이합니다. ```ts import { buildWaiverInnerTx, toSigner } from "@stablechain/enterprise"; -// on the user's side — buildWaiverInnerTx signs through a Signer; toSigner adapts a viem account +// 사용자 측에서 — buildWaiverInnerTx는 서명자를 통해 서명합니다; toSigner는 viem 계정을 조정합니다 const signed = await buildWaiverInnerTx(toSigner(user), stable.id, { to: token, data, gas: 150_000n, nonce }); -// on your backend +// 백엔드에서 const { txHash } = await gw.relay(signed); console.log("H_inner:", txHash); ``` @@ -125,7 +125,7 @@ console.log("H_inner:", txHash); H_inner: 0x8f3a...2d41 ``` -여러 개의 미리 서명된 트랜잭션의 경우, `sendBatch`와 같이 입력당 하나의 결과를 반환하는 `relayBatch`를 사용하세요. +여러 개의 사전 서명된 트랜잭션의 경우, `sendBatch`처럼 입력당 하나의 결과를 반환하는 `relayBatch`를 사용합니다. ## 거부 처리 @@ -138,7 +138,7 @@ try { await gw.send(user, { to: token, data }); } catch (err) { if (err instanceof StableEnterpriseRelayError && err.code === "TARGET_NOT_ALLOWED") { - // the InnerTx target is outside the configured allowlist + // InnerTx 대상이 구성된 허용 목록 외부에 있습니다 } throw err; } @@ -148,10 +148,11 @@ try { StableEnterpriseRelayError: relay failed [TARGET_NOT_ALLOWED]: target 0x... not allowed ``` -모든 거부 사유에 대한 전체 [`ErrorCode`](/ko/reference/enterprise-sdk#errorcode) 표를 참조하세요. +모든 거부 이유에 대한 전체 [`ErrorCode`](/ko/reference/enterprise-sdk#errorcode) 표를 참조하세요. ## 다음 단계 -- [**보장된 트랜잭션 전송**](/ko/how-to/send-guaranteed-transactions): 예약된 엔터프라이즈 레인 블록스페이스에 트랜잭션을 전송하고 가스 면제와 결합합니다. -- [**Enterprise SDK 참조**](/ko/reference/enterprise-sdk#relay-with-gas-waiver): 모든 메서드, 구성 옵션 및 오류 클래스에 대한 자세한 설명입니다. +- [**보장된 트랜잭션 전송**](/ko/how-to/send-guaranteed-transactions): 예약된 Enterprise-lane 블록 공간에 트랜잭션을 전송하고 가스 면제와 결합합니다. +- [**Enterprise SDK 참조**](/ko/reference/enterprise-sdk#relay-with-gas-waiver): 모든 메서드, 구성 옵션 및 오류 클래스에 대한 자세한 정보. - [**가스 면제**](/ko/explanation/gas-waiver): 프로토콜 수준에서 제로 가스 트랜잭션이 작동하는 방식. +- [**가스 없는 트랜잭션 활성화**](/ko/how-to/integrate-gas-waiver): 자체 면제 키를 등록하는 대신 Stable에서 호스팅하는 면제 서버를 사용합니다. diff --git a/docs/pages/ko/how-to/self-hosted-gas-waiver.mdx b/docs/pages/ko/how-to/self-hosted-gas-waiver.mdx index b9b696c..ff0ecaa 100644 --- a/docs/pages/ko/how-to/self-hosted-gas-waiver.mdx +++ b/docs/pages/ko/how-to/self-hosted-gas-waiver.mdx @@ -1,39 +1,43 @@ --- source_path: how-to/self-hosted-gas-waiver.mdx -source_sha: c054baff79a39314af7a4aaa087bd4525dfc7f12 +source_sha: 9954e27c1926c87e7fdb45e5c7543e56f6594250 title: "자체 호스팅 가스 면제" -description: "Stable에서 자체 가스 면제 서비스를 운영하세요. 거버넌스를 통해 면제 주소를 등록하고, 래퍼 트랜잭션을 구축하며, 호스팅된 서버 없이 브로드캐스트할 수 있습니다." +description: "Stable에서 자체 가스 면제 기능을 실행하세요. 거버넌스를 통해 면제 주소를 등록하고, 래퍼 트랜잭션을 구축하고, 호스팅된 서버 없이 브로드캐스트하세요." diataxis: "how-to" --- # 자체 호스팅 가스 면제 -자체 호스팅 가스 면제를 통해 호스팅된 면제 서버 API를 사용하는 대신 자체 면제 인프라를 운영할 수 있습니다. 온체인 거버넌스를 통해 면제 주소를 등록한 다음, 래퍼 트랜잭션을 네트워크에 직접 브로드캐스트합니다. +자체 호스팅 가스 면제를 사용하면 호스팅된 면제 서버 API를 사용하는 대신 자체 면제 인프라를 운영할 수 있습니다. 온체인 거버넌스를 통해 면제 주소를 등록한 다음 래퍼 트랜잭션을 네트워크에 직접 브로드캐스트합니다. -이 가이드는 면제 주소 등록, 서명된 사용자 트랜잭션 수집, 래퍼 트랜잭션 구성 및 브로드캐스트를 다룹니다. +이 가이드에서는 면제 주소 등록, 서명된 사용자 트랜잭션 수집, 래퍼 트랜잭션 구성 및 브로드캐스트를 다룹니다. :::note -**개념:** 가스 면제가 무엇이고 왜 필요한지에 대한 내용은 [가스 면제](/ko/explanation/gas-waiver)를 참조하세요. 전체 프로토콜 사양(래퍼 트랜잭션 메커니즘, 권한 부여, 정책 확인, 실행 의미론, 보안 모델)은 [가스 면제 프로토콜](/ko/reference/gas-waiver-api)을 참조하세요. +**개념:** 가스 면제가 무엇이며 왜 존재하는지에 대한 내용은 [가스 면제](/ko/explanation/gas-waiver)를 참조하십시오. 전체 프로토콜 사양(래퍼 트랜잭션 메커니즘, 권한 부여, 정책 검사, 실행 시맨틱스, 보안 모델)은 [가스 면제 프로토콜](/ko/reference/gas-waiver-api)을 참조하십시오. ::: -호스팅된 면제 서버 API 통합 경로는 [가스 무료 트랜잭션 활성화](/ko/how-to/integrate-gas-waiver)를 참조하세요. +호스팅된 면제 서버 API 통합 경로는 [가스 없는 트랜잭션 활성화](/ko/how-to/integrate-gas-waiver)를 참조하십시오. + +:::tip +`@stablechain/enterprise`는 동일한 거버넌스 등록 면제를 대상으로 아래의 모든 작업을 한 번의 호출로 수행합니다. TypeScript를 작성하는 경우 수동으로 래퍼 트랜잭션을 구축하는 대신 [가스 면제를 사용한 릴레이](/ko/how-to/relay-with-gas-waiver)를 사용하십시오. +::: ## 전제 조건 -- 검증인 거버넌스를 통해 온체인에 등록된 면제 주소. +- 검증자 거버넌스를 통해 온체인에 등록된 면제 주소. - 대상 계약에 대해 구성된 `AllowedTarget` 정책. ## 개요 자체 호스팅 흐름: -1. 사용자의 `gasPrice = 0`인 **서명된 InnerTx를 수집**합니다. -2. **WrapperTx를 구성합니다**: InnerTx를 RLP 인코딩하고, 마커 주소로 전송되는 트랜잭션에 래핑합니다. +1. `gasPrice = 0`으로 사용자로부터 서명된 **InnerTx를 수집**합니다. +2. **WrapperTx를 구성**: InnerTx를 RLP 인코딩하고 마커 주소로 전송된 트랜잭션으로 래핑합니다. 3. `eth_sendRawTransaction`을 통해 WrapperTx를 **브로드캐스트**합니다. ## 1단계: 사용자 InnerTx 수집 -사용자는 `gasPrice = 0`인 트랜잭션에 서명합니다. `to` 주소와 메서드 선택자는 면제자의 `AllowedTarget` 정책과 일치해야 합니다. +사용자는 `gasPrice = 0`으로 트랜잭션에 서명합니다. `to` 주소와 메서드 셀렉터는 면제의 `AllowedTarget` 정책과 일치해야 합니다. ```typescript // config.ts @@ -84,7 +88,7 @@ const signedInnerTx = await userWallet.signTransaction(innerTx); ## 2단계: WrapperTx 구성 -서명된 InnerTx를 RLP 인코딩하고 마커 주소로 전송되는 트랜잭션에 래핑합니다. `gasLimit`은 내부 실행과 래핑 오버헤드를 모두 포함해야 합니다. +서명된 InnerTx를 RLP 인코딩하고 마커 주소로의 트랜잭션으로 래핑합니다. `gasLimit`은 내부 실행 및 래핑 오버헤드를 모두 포함해야 합니다. ```typescript // constructWrapper.ts @@ -110,12 +114,12 @@ const signedWrapperTx = await waiverWallet.signTransaction(wrapperTx); ``` :::warning -`InnerTx.gasPrice`와 `WrapperTx.gasPrice`는 모두 `0`이어야 합니다. `WrapperTx.value`도 `0`이어야 합니다. 이 조건 중 하나라도 충족되지 않으면 검증인이 트랜잭션을 거부합니다. +`InnerTx.gasPrice`와 `WrapperTx.gasPrice`는 모두 `0`이어야 합니다. `WrapperTx.value`도 `0`이어야 합니다. 이 조건 중 하나라도 충족되지 않으면 검증자가 트랜잭션을 거부합니다. ::: ## 3단계: 브로드캐스트 -서명된 WrapperTx를 표준 JSON-RPC를 통해 제출합니다. +표준 JSON-RPC를 통해 서명된 WrapperTx를 제출합니다. ```typescript // broadcast.ts @@ -131,14 +135,14 @@ Wrapper tx broadcast: 0x... Confirmed: true ``` -## 주요 요점 +## 주요 시사점 -- 자체 호스팅 면제는 온체인 검증인 거버넌스를 통해 등록된 면제 주소를 필요로 합니다. -- WrapperTx는 RLP 인코딩된 InnerTx를 데이터로 사용하여 마커 주소(`0x...f333`)로 전송됩니다. -- InnerTx와 WrapperTx 모두 `gasPrice = 0` 및 `value = 0`이어야 합니다. +- 자체 호스팅 면제는 온체인 검증자 거버넌스를 통해 등록된 면제 주소가 필요합니다. +- WrapperTx는 RLP 인코딩된 InnerTx를 데이터로 하여 마커 주소(`0x...f333`)로 전송됩니다. +- InnerTx와 WrapperTx는 모두 `gasPrice = 0` 및 `value = 0`이어야 합니다. ## 다음 권장 사항 -- [**가스 면제 개념**](/ko/explanation/gas-waiver): 자체 서비스를 운영하기 전에 메커니즘을 이해하세요. -- [**가스 면제 프로토콜**](/ko/reference/gas-waiver-api): 마커 라우팅, 권한 부여 및 실행 의미론에 대한 전체 프로토콜 사양을 참조하세요. -- [**가스 없는 트랜잭션 활성화**](/ko/how-to/integrate-gas-waiver): 자체 호스팅 대신 호스팅된 면제 서버 API를 사용하세요. +- [**가스 면제 개념**](/ko/explanation/gas-waiver): 자체적으로 실행하기 전에 메커니즘을 이해하십시오. +- [**가스 면제 프로토콜**](/ko/reference/gas-waiver-api): 마커 라우팅, 권한 부여 및 실행 시맨틱스에 대한 전체 프로토콜 사양을 참조하십시오. +- [**가스 없는 트랜잭션 활성화**](/ko/how-to/integrate-gas-waiver): 자체 호스팅 대신 호스팅된 면제 서버 API를 사용하십시오. diff --git a/docs/pages/ko/reference/gas-waiver-api.mdx b/docs/pages/ko/reference/gas-waiver-api.mdx index 09d6d3a..f4e5f35 100644 --- a/docs/pages/ko/reference/gas-waiver-api.mdx +++ b/docs/pages/ko/reference/gas-waiver-api.mdx @@ -1,87 +1,87 @@ --- source_path: reference/gas-waiver-api.mdx -source_sha: 73af0a88040bca94925046ff388ccc018e9be11b +source_sha: 341f351cae76b4a715d9d44be9ac3552dd059dd5 title: "가스 면제 프로토콜" -description: "가스 면제를 위한 프로토콜 수준 사양: 트랜잭션 형식, 마커 라우팅, 거버넌스 제어 및 면제 서버 API." +description: "가스 면제를 위한 프로토콜 수준 사양: 트랜잭션 형식, 마커 라우팅, 거버넌스 제어, 면제 서버 API." diataxis: "reference" --- # 가스 면제 프로토콜 -이 문서는 가스 면제 메커니즘을 지정합니다: 트랜잭션 형식, 마커 라우팅, 거버넌스 제어 및 면제 서버 API. +이 문서는 가스 면제 메커니즘을 지정합니다: 트랜잭션 형식, 마커 라우팅, 거버넌스 제어, 면제 서버 API. :::note -**개념:** 가스 면제가 무엇이며 왜 존재하는지에 대해서는 [가스 면제](/ko/explanation/gas-waiver)를 참조하십시오. 호스팅된 면제 서버에 대한 통합 가이드를 보려면 [가스 없는 트랜잭션 활성화](/ko/how-to/integrate-gas-waiver)를 참조하십시오. +**개념:** 가스 면제가 무엇이며 왜 존재하는지에 대해서는 [가스 면제](/ko/explanation/gas-waiver)를 참조하십시오. 호스팅된 면제 서버와의 통합 방법에 대한 가이드는 [가스 없는 트랜잭션 활성화](/ko/how-to/integrate-gas-waiver)를 참조하십시오. ::: ## 개요 -가스 면제는 소수의 거버넌스 승인 주소("면제자")가 `gasPrice = 0`으로 트랜잭션을 제출하도록 허용함으로써 Stable에서 가스 없는 최종 사용자 트랜잭션을 가능하게 합니다. Stable은 현재 면제 서비스("면제 서버")를 운영하고 있으며, 프로토콜별 래퍼 로직을 구현하지 않고도 가스 없는 UX를 제공하기 위해 통합할 수 있습니다. +가스 면제는 거버넌스 승인을 받은 소수의 주소("면제자")가 `gasPrice = 0`으로 트랜잭션을 제출할 수 있도록 하여 Stable에서 가스 없는 최종 사용자 트랜잭션을 가능하게 합니다. Stable은 현재 프로토콜별 래퍼 로직을 구현하지 않고도 가스 없는 UX를 제공하기 위해 통합할 수 있는 면제 서비스("면제 서버")를 운영하고 있습니다. ## 범위 -이 사양은 다음을 다룹니다. +이 사양은 다음을 다룹니다: - 가스 면제 트랜잭션에 대한 프로토콜 수준 규칙 - 래퍼 트랜잭션 메커니즘 및 마커 주소 -- 거버넌스 제어 권한 부여 및 허용된 대상 -- 서명된 사용자 트랜잭션을 제출하기 위한 면제 서버 인터페이스 +- 거버넌스 제어 승인 및 허용된 대상 +- 서명된 사용자 트랜잭션 제출을 위한 면제 서버 인터페이스 ## 정의 -- **면제자**: 검증자 거버넌스를 통해 온체인에 등록되어 가스 면제 트랜잭션을 제출할 권한이 부여된 이더리움 주소. -- **내부Tx**: 최종 사용자의 서명된 트랜잭션(`gasPrice = 0`). -- **래퍼Tx**: 면제자가 서명한 트랜잭션으로, 사용자의 `내부Tx`를 체인으로 전송하고 실행을 승인합니다. -- **마커 주소**: 면제 래퍼 트랜잭션을 식별하는 데 사용되는 센티넬 주소: `0x000000000000000000000000000000000000f333`. -- **AllowedTarget**: 면제자를 특정 계약 주소 및 메서드 선택기로 제한하는 정책. +- **면제자(Waiver)**: 유효성 검사기 거버넌스를 통해 온체인에 등록되어 가스 면제 트랜잭션을 제출할 수 있는 Ethereum 주소. +- **내부 트랜잭션(InnerTx)**: `gasPrice = 0`으로 최종 사용자가 서명한 트랜잭션. +- **래퍼 트랜잭션(WrapperTx)**: 사용자 `InnerTx`를 체인으로 전송하고 실행을 승인하는 면제자가 서명한 트랜잭션. +- **마커 주소(Marker address)**: 면제자 래퍼 트랜잭션을 식별하는 데 사용되는 센티넬 주소: `0x000000000000000000000000000000000000f333`. +- **허용된 대상(AllowedTarget)**: 면제자를 특정 계약 주소 및 메서드 선택기로 제한하는 정책. ## 개요 -가스 면제는 래퍼 트랜잭션 패턴을 사용합니다. +가스 면제는 래퍼 트랜잭션 패턴을 사용합니다: -1. 사용자는 `gasPrice = 0`으로 `내부Tx`에 서명합니다. -2. 면제자는 `내부Tx`를 `래퍼Tx`로 래핑하고 브로드캐스트합니다. -3. 검증자는 마커 트랜잭션을 감지하고, 면제자 승인 및 정책 제약 조건을 확인한 다음, 내장된 `내부Tx`를 실행합니다. +1. 사용자는 `gasPrice = 0`으로 `InnerTx`에 서명합니다. +2. 면제자는 `InnerTx`를 `WrapperTx`로 래핑하고 브로드캐스트합니다. +3. 유효성 검사기는 마커 트랜잭션을 감지하고 면제자 승인 및 정책 제약 조건을 확인한 다음 내장된 `InnerTx`를 실행합니다. -Stable은 승인된 면제자로 온체인에 등록된 면제 서비스(면제 서버)를 운영합니다. 서명된 `내부Tx` 페이로드를 제출하기 위해 면제 서버 API와 통합합니다. +Stable은 승인된 면제자로 온체인에 등록된 면제 서비스(면제 서버)를 운영합니다. 서명된 `InnerTx` 페이로드를 제출하려면 면제 서버 API와 통합합니다. ## 프로토콜 사양 ### 마커 주소 라우팅 -트랜잭션은 다음의 경우에만 가스 면제 래퍼 트랜잭션으로 처리됩니다. +트랜잭션은 다음의 경우에만 면제자 래퍼 트랜잭션으로 처리됩니다. - `to == 0x000000000000000000000000000000000000f333`. -프로토콜은 트랜잭션 `data` 필드를 인코딩된 내부 트랜잭션 페이로드로 해석하고 아래의 면제 검증 규칙을 사용하여 처리합니다. +프로토콜은 트랜잭션 `data` 필드를 인코딩된 내부 트랜잭션 페이로드로 해석하고 아래의 면제자 확인 규칙을 사용하여 처리합니다. -### 권한 부여 및 정책 확인 +### 승인 및 정책 확인 -각 후보 래퍼 트랜잭션에 대해 검증자는 다음 사항을 적용해야 합니다. +각 후보 래퍼 트랜잭션에 대해 유효성 검사기는 다음을 적용해야 합니다: -1. **면제자 권한 부여** +1. **면제자 승인** - `WrapperTx.from`은 거버넌스를 통해 온체인에 등록된 면제자 주소여야 합니다. 2. **가스 면제** - `WrapperTx.gasPrice`는 `0`과 같아야 합니다. - `InnerTx.gasPrice`는 `0`과 같아야 합니다. 3. **대상 허용 목록** - - `InnerTx.to`와 `InnerTx.data`에서 추출된 메서드 선택기는 면제자의 `AllowedTarget` 정책에 의해 허용되어야 합니다. + - `InnerTx.to` 및 `InnerTx.data`에서 추출된 메서드 선택기는 면제자의 `AllowedTarget` 정책에 의해 허용되어야 합니다. 4. **값 제한** - `WrapperTx.value`는 `0`과 같아야 합니다. -어떠한 확인이라도 실패하면 검증자는 래퍼 트랜잭션을 거부하고 내부 트랜잭션을 실행하지 않습니다. +어떤 확인이라도 실패하면 유효성 검사기는 래퍼 트랜잭션을 거부하고 내부 트랜잭션을 실행하지 않습니다. -### 실행 시맨틱스 +### 실행 의미론 모든 확인이 통과하면: -1. 프로토콜은 사용자의 `from`, `nonce` 및 호출 시맨틱스를 보존하면서 사용자로 `InnerTx`를 실행합니다. -2. 가스 회계는 면제 메커니즘으로 처리됩니다: 사용자는 가스를 지불하지 않으며, 면제 트랜잭션은 기능 정의에 따라 `gasPrice = 0`을 사용합니다. -3. 래퍼 트랜잭션은 `InnerTx` 실행(언랩 및 검증을 위한 오버헤드 포함)을 충당하기에 충분한 `gasLimit`을 제공해야 합니다. +1. 프로토콜은 사용자의 `from`, `nonce` 및 호출 의미론을 유지하면서 `InnerTx`를 사용자로 실행합니다. +2. 가스 계산은 면제 메커니즘에 의해 처리됩니다. 사용자는 가스를 지불하지 않으며, 면제 트랜잭션은 기능 정의에 따라 `gasPrice = 0`을 사용합니다. +3. 래퍼 트랜잭션은 `InnerTx` 실행(래핑 해제 및 확인을 위한 오버헤드 포함)을 커버하기에 충분한 `gasLimit`을 제공해야 합니다. ## 트랜잭션 형식 -### 래퍼Tx +### WrapperTx 래퍼 트랜잭션은 면제자가 서명하고 마커 주소로 전송됩니다. @@ -89,15 +89,15 @@ Stable은 승인된 면제자로 온체인에 등록된 면제 서비스(면제 WrapperTx { from: waiver_address, to: 0x000000000000000000000000000000000000f333, - value: 0, // 0이어야 합니다. + value: 0, // 0이어야 함 data: RLP(InnerTx), // RLP 인코딩된 내부 트랜잭션 - gasPrice: 0, // 0이어야 합니다. - gasLimit: sufficient_for_inner, // 내부 실행 + 오버헤드를 포함해야 합니다. + gasPrice: 0, // 0이어야 함 + gasLimit: sufficient_for_inner, // 내부 실행 + 오버헤드를 커버해야 함 nonce: waiver_nonce } ``` -### 내부Tx +### InnerTx 내부 트랜잭션은 최종 사용자가 서명합니다. @@ -107,49 +107,53 @@ InnerTx { to: target_contract, value: value, data: call_data, - gasPrice: 0, // 0이어야 합니다. + gasPrice: 0, // 0이어야 함 gasLimit: execution_gas, nonce: user_nonce } ``` -## 거버넌스 제어 액세스 +## 거버넌스 제어 접근 -면제자 권한 부여는 검증자 거버넌스에 의해 온체인에서 제어됩니다. +면제자 승인은 유효성 검사기 거버넌스에 의해 온체인에서 통제됩니다. -거버넌스 제어는 다음을 제공합니다. +거버넌스 제어는 다음을 제공합니다: -- 면제자 주소의 검토 가능한 권한 부여 +- 면제자 주소의 검토 가능한 승인 - 면제자 등록 및 업데이트의 온체인 투명성 - 취소 기능 -- `AllowedTarget`을 통한 면제별 범위 지정 +- `AllowedTarget`을 통한 면제자별 범위 지정 ## 보안 모델 ### 최종 사용자 서명 무결성 -사용자가 `InnerTx`에 서명합니다. 면제자는 서명을 무효화하지 않고는 내부 트랜잭션 페이로드를 수정할 수 없습니다. 사용자가 의도한 트랜잭션 페이로드에만 서명하도록 여전히 확인해야 합니다. +사용자는 `InnerTx`에 서명합니다. 면제자는 서명을 무효화하지 않고는 내부 트랜잭션 페이로드를 수정할 수 없습니다. 사용자가 의도한 트랜잭션 페이로드에만 서명하도록 여전히 확인해야 합니다. -### 트러스트 경계 +### 신뢰 경계 -가스 면제는 파트너가 면제 서버를 통해 제출물을 라우팅하는 경우 서비스 종속성을 도입합니다. +가스 면제는 파트너가 면제 서버를 통해 제출을 라우팅하는 경우 서비스 종속성을 도입합니다: -- 서비스의 가용성은 가스 없는 트랜잭션을 제출하는 능력에 영향을 미칩니다. -- 권한 부여는 온체인에 남아 있습니다. 등록된 면제자 주소만 유효한 래퍼 제출물을 생성할 수 있습니다. +- 서비스 가용성은 가스 없는 트랜잭션을 제출하는 기능에 영향을 미칩니다. +- 승인은 온체인에 남아 있습니다. 등록된 면제자 주소만 유효한 래퍼 제출을 생성할 수 있습니다. ## 통합 -다음과 같이 통합합니다. +세 가지 경로는 동일한 온체인 결과를 생성하며, 누가 면제자 키를 보유하는지에 따라 다릅니다. [통합 경로 선택](/ko/explanation/gas-waiver#choosing-an-integration-path)을 참조하십시오. -1. 사용자로부터 서명된 `InnerTx`를 수집합니다 (`gasPrice = 0`). +호스팅된 면제 서버를 사용하는 경우: + +1. 사용자로부터 서명된 `InnerTx`(`gasPrice = 0`)를 수집합니다. 2. 서명된 내부 트랜잭션을 면제 서버 API에 제출합니다. -3. 스트리밍된 결과를 처리하고 최종 사용자에게 트랜잭션 해시를 노출합니다. +3. 스트리밍된 결과를 처리하고 최종 사용자에게 트랜잭션 해시를 표시합니다. + +직접 등록한 면제자 주소에서 `@stablechain/enterprise`는 한 번의 호출로 `WrapperTx`를 빌드, 서명 및 브로드캐스트합니다. [가스 면제를 사용하여 릴레이](/ko/how-to/relay-with-gas-waiver) 또는 [자체 호스팅 가스 면제](/ko/how-to/self-hosted-gas-waiver)를 참조하여 래퍼를 직접 구성하십시오. ## 면제 서버 ### 개요 -면제 서버는 서명된 사용자 `InnerTx` 페이로드를 면제자 승인 래퍼 트랜잭션으로 래핑하고 브로드캐스트합니다. 래퍼 트랜잭션을 구성하거나 면제자 주소를 운영할 필요가 없습니다. +면제 서버는 서명된 사용자 `InnerTx` 페이로드를 면제자가 승인한 래퍼 트랜잭션으로 래핑하고 브로드캐스트합니다. 래퍼 트랜잭션을 구성하거나 면제자 주소를 운영할 필요가 없습니다. ### 엔드포인트 및 기본 URL @@ -160,7 +164,7 @@ InnerTx { ### 인증 -health를 제외한 모든 엔드포인트에는 베어러 토큰 인증이 필요합니다. +건강을 제외한 모든 엔드포인트는 베어러 토큰 인증을 요구합니다: ```text Authorization: Bearer @@ -170,7 +174,7 @@ Authorization: Bearer #### GET `/v1/health` -상태 확인 엔드포인트입니다. +건강 확인 엔드포인트. 인증: 없음. @@ -178,7 +182,7 @@ Authorization: Bearer 서명된 내부 트랜잭션 배치를 제출합니다. -인증: 필수 (`Bearer`). +인증: 필수(`Bearer`). 요청 본문: @@ -199,9 +203,9 @@ Authorization: Bearer #### GET `/v1/submit` -스트리밍 제출을 위한 WebSocket 인터페이스입니다. +스트리밍 제출을 위한 WebSocket 인터페이스. -인증: 필수 (`Bearer`). +인증: 필수(`Bearer`). ### 통합 예시 @@ -238,7 +242,7 @@ async function submitGaslessTransaction(signedInnerTxHex, apiKey) { ### 사용자 InnerTx 생성 -`gasPrice = 0`으로 `InnerTx`를 구성한 다음 사용자 서명을 수집하는 것은 사용자의 책임입니다. +`gasPrice = 0`으로 `InnerTx`를 구성한 다음 사용자 서명을 수집하는 것은 사용자에게 달려 있습니다. 예시: @@ -250,7 +254,7 @@ async function createInnerTx(userWallet, contractAddress, callData, nonce) { to: contractAddress, data: callData, value: value, - gasPrice: 0, // 면제자의 경우 0이어야 합니다. + gasPrice: 0, // 면제를 위해 0이어야 함 gasLimit: 100000, nonce: nonce, chainId: 2201, // 메인넷은 988, 테스트넷은 2201 @@ -262,17 +266,18 @@ async function createInnerTx(userWallet, contractAddress, callData, nonce) { ### 오류 코드 -- `PARSE_ERROR`: 트랜잭션을 구문 분석하지 못했습니다. -- `INVALID_REQUEST`: 잘못된 요청 본문 -- `BATCH_SIZE_EXCEEDED`: 배치 크기가 허용된 최대값을 초과합니다. +- `PARSE_ERROR`: 트랜잭션 파싱 실패 +- `INVALID_REQUEST`: 요청 본문 형식이 잘못됨 +- `BATCH_SIZE_EXCEEDED`: 배치 크기가 허용된 최대값을 초과함 - `VALIDATION_FAILED`: 트랜잭션 유효성 검사 실패 -- `BROADCAST_FAILED`: 체인에 브로드캐스트하지 못했습니다. +- `BROADCAST_FAILED`: 체인으로 브로드캐스트 실패 - `RATE_LIMITED`: 비율 제한 초과 -- `QUEUE_FULL`: 서버 큐 용량 초과 +- `QUEUE_FULL`: 서버 큐가 용량에 도달함 - `TIMEOUT`: 요청 시간 초과 ## 다음 권장 사항 -- [**제로 가스 트랜잭션**](/ko/how-to/zero-gas-transactions): 제로 가스 수수료를 보여주는 영수증과 함께 데모 중심의 설명. +- [**제로 가스 트랜잭션**](/ko/how-to/zero-gas-transactions): 가스 수수료가 0인 영수증을 보여주는 데모 중심의 설명서. - [**가스 없는 트랜잭션 활성화**](/ko/how-to/integrate-gas-waiver): 배치 제출 및 오류 처리가 포함된 전체 호스팅 API 통합 가이드. -- [**자체 호스팅 가스 면제**](/ko/how-to/self-hosted-gas-waiver): 호스팅 API 없이 자체 면제 인프라 실행. +- [**자체 호스팅 가스 면제**](/ko/how-to/self-hosted-gas-waiver): 호스팅된 API 없이 자체 면제 인프라를 실행합니다. +- [**가스 면제를 사용하여 릴레이**](/ko/how-to/relay-with-gas-waiver): 유형이 지정된 Enterprise SDK 클라이언트를 사용하여 자체 면제에서 가스를 후원합니다. diff --git a/docs/pages/ko/reference/indexers.mdx b/docs/pages/ko/reference/indexers.mdx index 9357f81..9f5c792 100644 --- a/docs/pages/ko/reference/indexers.mdx +++ b/docs/pages/ko/reference/indexers.mdx @@ -1,6 +1,6 @@ --- source_path: reference/indexers.mdx -source_sha: 208d3664597b9263a10478a7fb3ad16384dffb53 +source_sha: 6cc9367a3209b641df9f4a6d11c8de08332c7ce5 title: "인덱서" description: "Stable을 지원하는 인덱싱, 분석, 규정 준수 및 조사 제공업체를 찾아보세요." diataxis: "reference" @@ -8,49 +8,50 @@ diataxis: "reference" # 인덱서 -인덱서, 분석 플랫폼 및 블록체인 인텔리전스 제공업체는 Stable에서 온체인 데이터를 쿼리하고, 활동을 측정하고, 거래 위험을 모니터링하고, 자금 흐름을 조사하는 데 도움을 줍니다. Stable은 EVM 호환이므로 표준 이더리움 인덱싱 도구가 원활하게 작동합니다. +인덱서, 분석 플랫폼 및 블록체인 인텔리전스 제공업체는 Stable에서 온체인 데이터를 쿼리하고, 활동을 측정하고, 거래 위험을 모니터링하고, 자금 흐름을 조사하는 데 도움을 줍니다. Stable은 EVM 호환되므로 표준 이더리움 인덱싱 도구는 수정 없이 작동합니다. 이 페이지에는 Stable에서 인덱싱, 분석, 규정 준수 및 조사를 위해 사용할 수 있는 제공업체가 나열되어 있습니다. ## 개요 표 -| **제공업체** | **카테고리** | **문서 / 시작하기** | **참고** | -| :-------------------------------------------------------------------------- | :-------------------------- | :------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- | -| [**Stablescan**](https://stablescan.xyz/) | 블록체인 탐색기 | [https://docs.etherscan.io/introduction](https://docs.etherscan.io/introduction) | 블록체인 탐색기; 거래, 블록 및 계약 가시성. | -| [**Envio**](https://envio.dev/?utm_source=stable&utm_medium=partner-docs) | 인덱서 | [https://docs.envio.dev/](https://docs.envio.dev/) | 단일 GraphQL API를 통한 실시간 및 과거 온체인 데이터. | -| [**The Graph**](https://thegraph.com/explorer/participants/indexers) | 인덱서 | [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) | GraphQL을 사용하여 서브그래프를 구축, 배포 및 쿼리합니다. | -| [**Goldsky**](https://goldsky.com/) | 인덱서 | [https://docs.goldsky.com/introduction](https://docs.goldsky.com/introduction) | 고성능 인덱싱 및 실시간 데이터 스트리밍. | -| [**Ormi Labs**](https://ormilabs.com/) | 인덱서 | [https://docs.ormilabs.com/subgraphs/quickstart](https://docs.ormilabs.com/subgraphs/quickstart) | 실시간 데이터 기능을 갖춘 차세대 서브그래프 인덱서. | -| [**Allium**](https://www.allium.so/) | 분석 / 데이터 플랫폼 | [https://docs.allium.so/](https://docs.allium.so/) | 정규화된 블록체인 데이터셋 및 분석 도구. | -| [**CoinMarketCap**](https://coinmarketcap.com/api/) | 시장 데이터 수집기 | [https://coinmarketcap.com/api/documentation/v1/](https://coinmarketcap.com/api/documentation/v1/) | 시장 가격, 목록 및 추적 도구. | -| [**CoinGecko**](https://www.coingecko.com/en/api) | 시장 데이터 수집기 | [https://docs.coingecko.com/](https://docs.coingecko.com/) | 개발자 API를 통한 독립적인 시장 데이터. | -| [**Dexscreener**](https://docs.dexscreener.com/) | DEX 분석 | [https://docs.dexscreener.com/](https://docs.dexscreener.com/) | 실시간 DEX 차트, 유동성 분석 및 대시보드. | -| [**DeBank**](https://debank.com/) | 포트폴리오 / 지갑 분석 | [https://cloud.debank.com/](https://cloud.debank.com/) | EVM 지갑 추적, 거래 및 포트폴리오 통찰력. | -| [**Chainalysis**](https://www.chainalysis.com/) | 규정 준수 / 조사 | [https://www.chainalysis.com/request-a-demo/](https://www.chainalysis.com/request-a-demo/) | KYT 모니터링, 엔티티 스크리닝 및 Stable 토큰에 대한 리액터 조사. | +| **제공업체** | **카테고리** | **문서 / 시작하기** | **참고** | +| :-------------------------------------------------------------------------- | :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------- | +| [**Stablescan**](https://stablescan.xyz/) | 블록체인 탐색기 | [https://docs.etherscan.io/introduction](https://docs.etherscan.io/introduction) | 블록체인 탐색기; 트랜잭션, 블록, 계약 가시성. | +| [**Envio**](https://envio.dev/?utm_source=stable&utm_medium=partner-docs) | 인덱서 | [https://docs.envio.dev/](https://docs.envio.dev/) | 단일 GraphQL API를 통한 실시간 및 과거 온체인 데이터. | +| [**The Graph**](https://thegraph.com/explorer/participants/indexers) | 인덱서 | [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) | GraphQL을 사용하여 서브그래프를 빌드, 배포 및 쿼리합니다. | +| [**Goldsky**](https://goldsky.com/) | 인덱서 | [https://docs.goldsky.com/introduction](https://docs.goldsky.com/introduction) | 고성능 인덱싱 및 실시간 데이터 스트리밍. | +| [**Ormi Labs**](https://ormilabs.com/) | 인덱서 | [https://docs.ormilabs.com/subgraphs/quickstart](https://docs.ormilabs.com/subgraphs/quickstart) | 실시간 데이터 기능을 갖춘 차세대 서브그래프 인덱서. | +| [**SQD**](https://sqd.dev/chains/stable/) | 인덱서 | [https://docs.sqd.dev/](https://docs.sqd.dev/) | 디코딩된 과거 및 실시간 스트림; Stable 데이터 세트는 요청 시 제공됩니다. | +| [**Allium**](https://www.allium.so/) | 분석 / 데이터 플랫폼 | [https://docs.allium.so/](https://docs.allium.so/) | 정규화된 블록체인 데이터 세트 및 분석 도구. | +| [**CoinMarketCap**](https://coinmarketcap.com/api/) | 시장 데이터 수집기 | [https://coinmarketcap.com/api/documentation/v1/](https://coinmarketcap.com/api/documentation/v1/) | 시장 가격, 상장 및 추적 도구. | +| [**CoinGecko**](https://www.coingecko.com/en/api) | 시장 데이터 수집기 | [https://docs.coingecko.com/](https://docs.coingecko.com/) | 개발자 API를 통한 독립적인 시장 데이터. | +| [**Dexscreener**](https://docs.dexscreener.com/) | DEX 분석 | [https://docs.dexscreener.com/](https://docs.dexscreener.com/) | 실시간 DEX 차트, 유동성 분석 및 대시보드. | +| [**DeBank**](https://debank.com/) | 포트폴리오 / 지갑 분석 | [https://cloud.debank.com/](https://cloud.debank.com/) | EVM 지갑 추적, 거래 및 포트폴리오 인사이트. | +| [**Chainalysis**](https://www.chainalysis.com/) | 규정 준수 / 조사 | [https://www.chainalysis.com/request-a-demo/](https://www.chainalysis.com/request-a-demo/) | Stable 토큰에 대한 KYT 모니터링, 엔티티 스크리닝 및 Reactor 조사. | ## 1. 인덱서 -인덱서는 원시 블록체인 데이터를 검색 및 쿼리 가능한 형식으로 변환합니다. 인덱서는 대시보드, 분석, 월렛, 블록 탐색기 및 애플리케이션 백엔드를 지원합니다. +인덱서는 원시 블록체인 데이터를 검색 및 쿼리 가능한 형식으로 변환합니다. 이는 대시보드, 분석, 지갑, 블록 탐색기 및 애플리케이션 백엔드를 지원합니다. ### Envio -Envio는 블록체인 앱을 위한 데이터 레이어입니다. 단일 GraphQL API를 통해 실시간 및 과거 온체인 데이터를 제공하며, 원시 고속 액세스 및 Envio Cloud에서 관리형 호스팅을 지원합니다. +Envio는 블록체인 앱을 위한 데이터 레이어입니다. 단일 GraphQL API를 통해 실시간 및 과거 온체인 데이터를 제공하며, 원시 고속 액세스 및 Envio Cloud에서 관리형 호스팅을 제공합니다. **기능** - 실시간 및 과거 온체인 데이터 -- 원시 고속 액세스를 지원하는 단일 GraphQL API +- 원시 고속 액세스를 통한 단일 GraphQL API - Envio Cloud에서 관리형 호스팅 **문서** -Envio의 HyperIndex는 RPC를 데이터 소스로 사용하여 Stable을 포함한 모든 EVM 체인을 기본적으로 인덱싱합니다. +Envio의 HyperIndex는 자체 RPC를 데이터 소스로 사용하여 Stable을 포함한 모든 EVM 체인을 즉시 인덱싱하는 것을 기본적으로 지원합니다. [https://docs.envio.dev/](https://docs.envio.dev/) ### The Graph -75,000개 이상의 프로젝트에 데이터 액세스를 제공하는 분산형 인덱싱 프로토콜입니다. +75,000개 이상의 프로젝트에 대한 데이터 액세스를 지원하는 분산형 인덱싱 프로토콜. **기능** @@ -60,7 +61,7 @@ Envio의 HyperIndex는 RPC를 데이터 소스로 사용하여 Stable을 포함 **문서** -다음 빠른 시작 가이드를 따라 몇 분 안에 서브그래프를 생성, 배포 및 쿼리하십시오. +다음 빠른 시작 가이드를 통해 몇 분 안에 서브그래프를 생성, 배포 및 쿼리하십시오. [https://thegraph.com/docs/en/developing/creating-a-subgraph/](https://thegraph.com/docs/en/developing/creating-a-subgraph/) @@ -70,35 +71,66 @@ Ormi는 실시간 및 과거 블록체인 데이터를 대규모로 제공하도 **기능** -- 체인 끝 부분 인덱싱 +- 체인 팁 인덱싱 - 1초 미만의 쿼리 지연 시간 - 코드 없는 기능 **문서** -Ormi로 실시간 데이터 쿼리를 시작하세요: +Ormi로 실시간 데이터 쿼리를 시작하십시오. [https://docs.ormilabs.com/subgraphs/quickstart](https://docs.ormilabs.com/subgraphs/quickstart) -Stable에서 USDT0 데이터를 실시간으로 쿼리하는 방법을 알아보세요. +Stable에서 USDT0 데이터를 실시간으로 쿼리하는 방법을 알아보십시오. [https://docs.ormilabs.com/subgraphs/tutorials/query-usdt0](https://docs.ormilabs.com/subgraphs/tutorials/query-usdt0) ### Goldsky -즉각적인 서브그래프 및 개발자 도구를 갖춘 고성능 인덱싱 플랫폼입니다. +인스턴트 서브그래프 및 개발자 도구를 갖춘 고성능 인덱싱 플랫폼. **기능** - 서브그래프 배포 및 관리 - 실시간 이벤트 스트리밍을 위한 웹훅 생성 -- 외부 데이터베이스로의 다중 서브그래프 동기화 +- 외부 데이터베이스로 다중 서브그래프 동기화 **문서** [https://docs.goldsky.com/introduction](https://docs.goldsky.com/introduction) -24시간 연중무휴 지원을 받으려면 [support@goldsky.com](mailto:support@goldsky.com)으로 문의하십시오. +24시간 지원을 받으려면 [support@goldsky.com](mailto:support@goldsky.com)으로 문의하십시오. + +### SQD + +SQD는 원시 체인 상태 대신 디코딩된 스키마 형식의 테이블을 반환하는 HTTP 스트리밍 API인 Portal을 통해 Stable 데이터를 제공하므로 아카이브 노드를 실행하지 않고도 인덱싱할 수 있습니다. 사용자 지정 변환이 필요한 팀은 Squid 및 Pipes SDK를 사용하여 인덱서를 구축하고 자체 호스팅하거나 SQD Cloud에서 실행할 수 있습니다. + +**기능** + +- 단일 HTTP 엔드포인트를 통한 블록, 트랜잭션 및 로그의 과거 및 실시간 스트리밍 +- `stable-mainnet` (체인 ID 988) 및 `stable-testnet` (체인 ID 2201)을 포함하는 디코딩된 스키마 형식의 테이블 +- Postgres, ClickHouse, MongoDB, SQLite 및 Parquet용 커넥터가 있는 사용자 지정 인덱서용 Squid 및 Pipes SDK +- 블록은 Portal에 도달하기 전에 SQD 네트워크 작업자에 의해 검증됩니다. + +:::note +Stable 데이터 세트는 SQD에서 비공개입니다. 액세스는 공개 네트워크를 통하는 것이 아니라 SQD Private Portal을 통해 엔터프라이즈 고객의 요청에 따라 프로비저닝됩니다. 테스트넷 적용 범위는 제네시스가 아닌 블록 39,381,701부터 시작됩니다. +::: + +**문서** + +Stable 적용 범위 세부 정보, 데이터 세트 슬러그 및 엔드포인트를 읽어보세요. + +[https://sqd.dev/chains/stable/](https://sqd.dev/chains/stable/) + +Portal에서 디코딩된 데이터를 스트리밍하세요. + +[https://docs.sqd.dev/en/portal/evm/quickstart](https://docs.sqd.dev/en/portal/evm/quickstart) + +Pipes SDK로 사용자 지정 인덱서를 구축하세요. + +[https://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstart](https://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstart) + +**시작하기**: Stable 데이터 세트에 대한 액세스를 프로비저닝하려면 [SQD에 문의](https://sqd.dev/contact/)한 다음 Portal에서 스트리밍하거나 SDK 인덱서를 가리키십시오. ## 2. 분석 제공업체 @@ -106,21 +138,21 @@ Stable에서 USDT0 데이터를 실시간으로 쿼리하는 방법을 알아보 ### Allium -블록체인 생태계 전반의 엔지니어 및 분석가를 위한 기본 데이터 플랫폼입니다. +블록체인 생태계 전반의 엔지니어 및 분석가를 위한 기반 데이터 플랫폼입니다. **기능** -- 정규화된 블록체인 데이터셋 +- 정규화된 블록체인 데이터 세트 - 분석 팀을 위한 쿼리 도구 - 엔터프라이즈 데이터 인프라 **문서** -Allium의 데이터 플랫폼 및 API 리소스 시작하기: +Allium의 데이터 플랫폼 및 API 리소스를 시작하십시오. [https://www.allium.so/](https://www.allium.so/) -**시작하기**: [allium.so](https://www.allium.so/)에서 가입하여 API 액세스를 받은 다음 REST API를 사용하여 정규화된 Stable 온체인 데이터셋을 쿼리합니다. +**시작하기**: [allium.so](https://www.allium.so/)에서 가입하여 API 액세스 권한을 얻은 다음 REST API를 사용하여 정규화된 Stable 온체인 데이터 세트를 쿼리하십시오. ### CoinMarketCap @@ -128,17 +160,17 @@ Allium의 데이터 플랫폼 및 API 리소스 시작하기: **기능** -- Stable 자산에 대한 가격 추적 +- Stable 자산의 가격 추적 - 포트폴리오 도구 - 시장 데이터 API **문서** -CMC API 및 통합 리소스 탐색: +CMC API 및 통합 리소스를 살펴보십시오. [https://coinmarketcap.com/api/](https://coinmarketcap.com/api/) -**시작하기**: [coinmarketcap.com/api](https://coinmarketcap.com/api/)에서 API 키를 등록하고 REST API를 통해 Stable 자산 가격 및 시장 데이터를 쿼리합니다. +**시작하기**: [coinmarketcap.com/api](https://coinmarketcap.com/api/)에서 API 키를 등록하고 REST API를 통해 Stable 자산 가격 및 시장 데이터를 쿼리하십시오. ### CoinGecko @@ -146,39 +178,39 @@ CMC API 및 통합 리소스 탐색: **기능** -- 시장 목록 및 가격 데이터 +- 시장 상장 및 가격 데이터 - 과거 분석 -- 개발자를 위한 API 액세스 +- 개발자용 API 액세스 **문서** -CoinGecko의 API 문서 액세스: +CoinGecko의 API 문서를 액세스하십시오. [https://www.coingecko.com/en/api](https://www.coingecko.com/en/api) -**시작하기**: [coingecko.com/en/api](https://www.coingecko.com/en/api)에서 무료 또는 Pro API 키를 얻고 REST API를 통해 Stable 토큰 가격 및 시장 데이터를 쿼리합니다. +**시작하기**: [coingecko.com/en/api](https://www.coingecko.com/en/api)에서 무료 또는 Pro API 키를 얻고 REST API를 통해 Stable 토큰 가격 및 시장 데이터를 쿼리하십시오. ### Dexscreener -분산형 거래소를 위한 실시간 차트 및 분석. +탈중앙화 장소를 위한 실시간 차트 및 분석. **기능** -- 라이브 DEX 차트 +- 실시간 DEX 차트 - 유동성 및 페어 분석 -- 거래 대시보드 +- 트레이딩 대시보드 **문서** -Dexscreener의 API 엔드포인트 및 개발자 도구 탐색: +Dexscreener의 API 엔드포인트 및 개발자 도구를 살펴보십시오. [https://docs.dexscreener.com/](https://docs.dexscreener.com/) -**시작하기**: [Dexscreener API 문서](https://docs.dexscreener.com/)를 탐색하여 Stable 기반 DEX 풀에 대한 실시간 페어 데이터, 유동성 및 거래 활동을 쿼리합니다. +**시작하기**: [Dexscreener API 문서](https://docs.dexscreener.com/)를 탐색하여 Stable 기반 DEX 풀의 실시간 페어 데이터, 유동성 및 거래 활동을 쿼리하십시오. ### DeBank -이더리움 및 EVM 생태계를 위한 포트폴리오 트래커입니다. +이더리움 및 EVM 생태계를 위한 포트폴리오 추적기. **기능** @@ -188,11 +220,11 @@ Dexscreener의 API 엔드포인트 및 개발자 도구 탐색: **문서** -DeBank의 API 참조 및 통합 문서 읽기: +DeBank의 API 참조 및 통합 문서를 읽어보십시오. [https://docs.debank.com/](https://docs.debank.com/) -**시작하기**: [DeBank Cloud](https://cloud.debank.com/)에 가입하여 API 키에 액세스하고 Stable 지갑 잔액, 거래 내역 및 포트폴리오 데이터를 쿼리합니다. +**시작하기**: [DeBank Cloud](https://cloud.debank.com/)에 가입하여 API 키에 액세스하고 Stable 지갑 잔액, 거래 내역 및 포트폴리오 데이터를 쿼리하십시오. ## 3. 규정 준수 및 조사 @@ -200,9 +232,9 @@ DeBank의 API 참조 및 통합 문서 읽기: ### Chainalysis -Chainalysis는 KYT, 엔티티 스크리닝 제품 및 Reactor를 통해 Stable을 지원합니다. +Chainalysis는 [KYT](https://www.chainalysis.com/product/kyt/), 엔티티 스크리닝 제품 및 [Reactor](https://www.chainalysis.com/product/reactor/)를 통해 Stable을 지원합니다. -Stable에 배포된 새로운 대체 가능 및 대체 불가능 토큰은 ERC-20 및 ERC-721과 같은 주요 표준을 따르는 경우 자동으로 적용됩니다. +Stable에 배포된 새로운 대체 가능 및 비대체 가능 토큰은 ERC-20 및 ERC-721과 같은 주요 표준을 따르는 경우 자동으로 적용됩니다. **기능** @@ -213,10 +245,10 @@ Stable에 배포된 새로운 대체 가능 및 대체 불가능 토큰은 ERC-2 **문서** -적용 범위 세부 정보는 [Stable 통합 발표](https://www.chainalysis.com/blog/stable-automatic-token-support/)를 참조하십시오. +적용 범위 세부 정보는 [Stable 통합 발표](https://www.chainalysis.com/blog/stable-automatic-token-support/)를 읽어보십시오. [Chainalysis 데모 요청](https://www.chainalysis.com/request-a-demo/). --- -Stable을 통합하는 인덱싱, 분석, 규정 준수 또는 조사 플랫폼이 있으신가요? [bizdev@stable.xyz](mailto:bizdev@stable.xyz)로 문의해 주십시오. +Stable을 통합하는 인덱싱, 분석, 규정 준수 또는 조사 플랫폼을 가지고 계신가요? [bizdev@stable.xyz](mailto:bizdev@stable.xyz)로 문의해 주세요. diff --git a/docs/pages/ko/reference/node-operations-overview.mdx b/docs/pages/ko/reference/node-operations-overview.mdx index daf3b2d..31f8219 100755 --- a/docs/pages/ko/reference/node-operations-overview.mdx +++ b/docs/pages/ko/reference/node-operations-overview.mdx @@ -1,71 +1,71 @@ --- source_path: reference/node-operations-overview.mdx -source_sha: 292d91190bd4c06f8a2e4e87f9253a9bb856c28a -title: "운영" -description: "Stable 노드를 실행하세요. 설치, 구성, 모니터링 및 업그레이드." +source_sha: 834cf7cad55269092423973290344330f70a4a77 +title: "Stable 노드 실행하기" +description: "Stable 노드를 실행합니다. 설치, 구성, 모니터링, 업그레이드." diataxis: "reference" --- -# 운영 +# Stable 노드 실행하기 -운영은 Stable 노드 실행을 다룹니다: 풀 노드 또는 아카이브 노드, 테스트넷 또는 메인넷, 설치부터 모니터링까지. 노드가 적용하는 체인 수준 동작(수수료 모델, 파이널리티, 가스로서의 USDT0)에 대해서는 [가스 가격 책정](/ko/explanation/gas-pricing), [파이널리티](/ko/explanation/finality), [아키텍처 개요](/ko/explanation/core-optimization-overview)를 참조하세요. +이 섹션에서는 Stable 노드(풀 노드 또는 아카이브 노드, 테스트넷 또는 메인넷)를 설치부터 모니터링까지 실행하는 방법에 대해 설명합니다. 노드가 적용하는 체인 수준 동작(수수료 모델, 최종성, USDT0를 가스로 사용)에 대해서는 [가스 가격 책정](/ko/explanation/gas-pricing), [최종성](/ko/explanation/finality) 및 [아키텍처 개요](/ko/explanation/core-optimization-overview)를 참조하십시오. ## 빠른 링크 -- **[시스템 요구사항](/ko/reference/node-system-requirements)** - 다양한 노드 유형에 대한 하드웨어 및 소프트웨어 요구사항 +- **[시스템 요구 사항](/ko/reference/node-system-requirements)** - 다양한 노드 유형에 대한 하드웨어 및 소프트웨어 요구 사항 - **[설치 가이드](/ko/how-to/install-node)** - 다양한 플랫폼에 대한 단계별 설치 지침 -- **[구성](/ko/reference/node-configuration)** - 상세한 구성 옵션 및 모범 사례 +- **[구성](/ko/reference/node-configuration)** - 자세한 구성 옵션 및 모범 사례 - **[스냅샷 및 동기화](/ko/how-to/use-node-snapshots)** - 스냅샷을 사용한 빠른 동기화 옵션 -- **[밸리데이터 생성](/ko/how-to/run-validator)** - 동기화된 노드를 밸리데이터로 등록하고 자체 위임 +- **[검증인 생성](/ko/how-to/run-validator)** - 동기화된 노드를 검증인으로 등록하고 자체 위임 - **[업그레이드 가이드](/ko/how-to/upgrade-node)** - 노드 업그레이드 절차 및 버전 기록 -- **[모니터링](/ko/how-to/monitor-node)** - 노드 모니터링을 위한 도구 및 메트릭 -- **[문제 해결](/ko/how-to/troubleshoot-node)** - 일반적인 문제 및 해결책 +- **[모니터링](/ko/how-to/monitor-node)** - 노드 모니터링을 위한 도구 및 지표 +- **[문제 해결](/ko/how-to/troubleshoot-node)** - 일반적인 문제 및 해결 방법 -`stabled`를 실행하는 대신 체인에서 밸리데이터 데이터(스테이크, 가동 시간, 투표 기록)를 읽으려면 [밸리데이터 데이터 인덱싱](/ko/how-to/index-validator-data)을 참조하세요. +`stabled`를 실행하는 대신 체인에서 검증인 데이터(스테이크, 가동 시간, 투표 기록)를 읽으려면 [검증인 데이터 인덱싱](/ko/how-to/index-validator-data)을 참조하십시오. ## 노드 유형 ### 풀 노드 -풀 노드는 블록체인의 완전한 복사본을 유지하며 모든 트랜잭션과 블록을 검증합니다. 풀 노드는: -- 모든 트랜잭션과 블록을 검증 -- 전체 블록체인 기록을 유지 -- 다른 노드에 데이터를 제공할 수 있음 -- 네트워크의 탈중앙화를 지원 +풀 노드는 블록체인의 완전한 복사본을 유지하고 모든 트랜잭션과 블록을 검증합니다. 풀 노드는 다음을 수행합니다. +- 모든 트랜잭션 및 블록 검증 +- 전체 블록체인 기록 유지 +- 다른 노드에 데이터 제공 가능 +- 네트워크의 분산화 지원 ### 아카이브 노드 -아카이브 노드는 모든 상태의 완전한 기록을 저장하며 과거 쿼리를 제공할 수 있습니다. 아카이브 노드는: -- 모든 과거 상태를 저장 -- 모든 블록 높이에서 과거 쿼리를 지원 -- 상당히 더 많은 스토리지를 요구 +아카이브 노드는 모든 상태의 전체 기록을 저장하고 기록 쿼리를 제공할 수 있습니다. 아카이브 노드는 다음을 수행합니다. +- 모든 기록 상태 저장 +- 모든 블록 높이에서 기록 쿼리 지원 +- 훨씬 더 많은 저장 공간 필요 - 블록 탐색기 및 분석에 필수적 ## 네트워크 정보 -RPC 엔드포인트, 블록 탐색기, 체인 파라미터를 포함한 전체 네트워크 세부 정보는 다음을 참조하세요: +RPC 엔드포인트, 블록 탐색기 및 체인 매개변수를 포함한 전체 네트워크 세부 정보는 다음을 참조하십시오. - **[메인넷](/ko/reference/mainnet-information)** - 메인넷 세부 정보 - **[테스트넷](/ko/reference/testnet-information)** - 테스트넷 세부 정보 ## 지원 및 커뮤니티 -- **Discord**: [Stable Discord 참여하기](https://discord.gg/stablexyz) +- **Discord**: [Stable Discord 가입하기](https://discord.gg/stablexyz) ## 빠른 시작 -빠르게 시작하고자 하는 숙련된 운영자를 위해: +빠르게 시작하려는 숙련된 운영자를 위한 정보: -1. [시스템 요구사항](/ko/reference/node-system-requirements) 확인 +1. [시스템 요구 사항](/ko/reference/node-system-requirements) 확인 2. [설치 가이드](/ko/how-to/install-node) 따르기 3. [구성 가이드](/ko/reference/node-configuration)를 사용하여 노드 구성 4. [스냅샷](/ko/how-to/use-node-snapshots)으로 동기화 속도 향상 5. [모니터링 가이드](/ko/how-to/monitor-node)로 노드 모니터링 -네트워크 파라미터 및 RPC 엔드포인트는 [메인넷 정보](/ko/reference/mainnet-information) 또는 [테스트넷 정보](/ko/reference/testnet-information)를 참조하세요. +네트워크 매개변수 및 RPC 엔드포인트에 대해서는 [메인넷 정보](/ko/reference/mainnet-information) 또는 [테스트넷 정보](/ko/reference/testnet-information)를 참조하십시오. -## 노드 운영이 체인과 연결되는 방식 +## 노드 운영자가 체인에 연결하는 방법 -노드를 실행한다는 것은 Stable의 체인 수준 규칙을 적용한다는 의미입니다. 다음 페이지에서는 노드가 구현하는 동작을 설명합니다: +노드를 실행한다는 것은 Stable의 체인 수준 규칙을 적용하는 것을 의미합니다. 이 페이지에서는 노드가 구현하는 동작을 설명합니다. -- **[컨트랙트 개요](/ko/explanation/contracts-overview)** 는 노드가 제공하는 수수료 모델, JSON-RPC 표면, 시스템 모듈을 다룹니다. -- **[파이널리티](/ko/explanation/finality)** 는 단일 슬롯 파이널리티와 합의 계층에서 "확정"이 무엇을 의미하는지 설명합니다. -- **[아키텍처 개요](/ko/explanation/core-optimization-overview)** 는 합의, 실행, 데이터베이스, RPC 계층을 살펴봅니다. -- **[가스 가격 책정](/ko/explanation/gas-pricing)** 은 USDT0 단위 수수료가 어떻게 책정되고 징수되는지 설명합니다. +- **[컨트랙트 개요](/ko/explanation/contracts-overview)**는 수수료 모델, JSON-RPC 인터페이스 및 노드가 제공하는 시스템 모듈을 다룹니다. +- **[최종성](/ko/explanation/finality)**은 단일 슬롯 최종성과 합의 계층에서 "확정됨"의 의미를 설명합니다. +- **[아키텍처 개요](/ko/explanation/core-optimization-overview)**는 합의, 실행, 데이터베이스 및 RPC 계층을 설명합니다. +- **[가스 가격 책정](/ko/explanation/gas-pricing)**은 USDT0으로 표시되는 수수료가 어떻게 책정되고 징수되는지 설명합니다. diff --git a/docs/sidebar.json b/docs/sidebar.json index 76942b2..09ffbcf 100644 --- a/docs/sidebar.json +++ b/docs/sidebar.json @@ -735,15 +735,15 @@ "link": "/ko/explanation/ethereum-compatibility" }, { - "text": "완결성", + "text": "최종성", "link": "/ko/explanation/finality" }, { - "text": "가스 가격", + "text": "가스 가격 책정", "link": "/ko/explanation/gas-pricing" }, { - "text": "가스 가격 API", + "text": "가스 가격 책정 API", "link": "/ko/reference/gas-pricing-api" }, { @@ -765,7 +765,7 @@ "link": "/ko/explanation/flow-of-funds" }, { - "text": "USDT0 Stable 브리징", + "text": "USDT0를 Stable로 브리징", "link": "/ko/explanation/usdt0-bridging" }, { @@ -773,7 +773,7 @@ "link": "/ko/explanation/bridge-security" }, { - "text": "USDT0 가스", + "text": "가스로서의 USDT0", "link": "/ko/explanation/usdt-as-gas-token" }, { @@ -789,7 +789,7 @@ "link": "/ko/explanation/guaranteed-blockspace" }, { - "text": "USDT 전송 애그리게이터", + "text": "USDT 전송 Aggregator", "link": "/ko/explanation/usdt-transfer-aggregator" }, { @@ -833,25 +833,25 @@ "collapsed": true, "items": [ { - "text": "결제 사용 사례", + "text": "사용 사례: 결제", "link": "/ko/explanation/use-case-payments" }, { - "text": "급여 사용 사례", + "text": "사용 사례: 급여", "link": "/ko/explanation/use-case-payroll" }, { - "text": "스폰서 사용 사례", + "text": "사용 사례: 후원", "link": "/ko/explanation/use-case-sponsored" }, { - "text": "가상 사용 사례", + "text": "사용 사례: 비공개", "link": "/ko/explanation/use-case-private" } ] }, { - "text": "토큰노믹스", + "text": "토큰 경제학", "link": "/ko/reference/tokenomics" }, { @@ -876,62 +876,6 @@ "text": "빠른 시작", "link": "/ko/tutorial/quick-start" }, - { - "text": "Stable SDK", - "collapsed": true, - "items": [ - { - "text": "개요", - "link": "/ko/explanation/sdk-overview" - }, - { - "text": "빠른 시작", - "link": "/ko/tutorial/sdk-quickstart" - }, - { - "text": "참조", - "link": "/ko/reference/sdk" - }, - { - "text": "수익 창출", - "link": "/ko/how-to/earn-yield" - }, - { - "text": "viem 통합", - "link": "/ko/how-to/sdk-with-viem" - }, - { - "text": "wagmi 통합", - "link": "/ko/how-to/sdk-with-wagmi" - } - ] - }, - { - "text": "엔터프라이즈 SDK", - "collapsed": true, - "items": [ - { - "text": "개요", - "link": "/ko/explanation/enterprise-sdk" - }, - { - "text": "트랜잭션 중계", - "link": "/ko/how-to/relay-with-gas-waiver" - }, - { - "text": "블록 공간 보장", - "link": "/ko/how-to/send-guaranteed-transactions" - }, - { - "text": "보장된 중계 트랜잭션", - "link": "/ko/how-to/guaranteed-relayed-transactions" - }, - { - "text": "참조", - "link": "/ko/reference/enterprise-sdk" - } - ] - }, { "text": "사용자 온보딩", "collapsed": true, @@ -979,21 +923,21 @@ "link": "/ko/tutorial/send-usdt0" }, { - "text": "가스 없는 트랜잭션", + "text": "무료 가스 트랜잭션", "link": "/ko/how-to/zero-gas-transactions" }, { - "text": "USDT0를 가스로 사용", + "text": "가스로서 USDT0 사용", "link": "/ko/how-to/work-with-usdt-gas" }, { - "text": "USDT0 Stable 브리징", + "text": "USDT0를 Stable로 브리징", "link": "/ko/tutorial/bridge-usdt0" } ] }, { - "text": "사용자 요금 청구", + "text": "사용자에게 청구", "collapsed": true, "items": [ { @@ -1035,7 +979,7 @@ "link": "/ko/reference/invoices" }, { - "text": "호출당 지불", + "text": "통화당 지불", "link": "/ko/reference/pay-per-call" }, { @@ -1093,11 +1037,11 @@ "link": "/ko/reference/system-modules-api-overview" }, { - "text": "뱅크 모듈", + "text": "은행 모듈", "link": "/ko/explanation/bank-module" }, { - "text": "뱅크 모듈 API", + "text": "은행 모듈 API", "link": "/ko/reference/bank-module-api" }, { @@ -1129,7 +1073,7 @@ "link": "/ko/how-to/track-unbonding" }, { - "text": "검증자 데이터 색인", + "text": "유효성 검사기 데이터 색인", "link": "/ko/how-to/index-validator-data" } ] @@ -1171,7 +1115,7 @@ "link": "/ko/reference/mainnet-information" }, { - "text": "메인넷 버전 이력", + "text": "메인넷 버전 기록", "link": "/ko/reference/mainnet-version-history" } ] @@ -1185,7 +1129,7 @@ "link": "/ko/reference/testnet-information" }, { - "text": "테스트넷 버전 이력", + "text": "테스트넷 버전 기록", "link": "/ko/reference/testnet-version-history" }, { @@ -1227,7 +1171,7 @@ "link": "/ko/reference/bridges" }, { - "text": "DEX", + "text": "Dex", "link": "/ko/reference/dexes" }, { @@ -1261,7 +1205,7 @@ ] }, { - "text": "운영 준비 태세", + "text": "프로덕션 준비성", "link": "/ko/how-to/production-readiness" }, { @@ -1281,7 +1225,73 @@ ] }, { - "text": "운영", + "text": "도구 및 SDK", + "collapsed": true, + "items": [ + { + "text": "도구 및 SDK 개요", + "link": "/ko/explanation/tools-overview" + }, + { + "text": "Stable SDK", + "collapsed": true, + "items": [ + { + "text": "개요", + "link": "/ko/explanation/sdk-overview" + }, + { + "text": "빠른 시작", + "link": "/ko/tutorial/sdk-quickstart" + }, + { + "text": "참조", + "link": "/ko/reference/sdk" + }, + { + "text": "수익 창출", + "link": "/ko/how-to/earn-yield" + }, + { + "text": "viem 통합", + "link": "/ko/how-to/sdk-with-viem" + }, + { + "text": "wagmi 통합", + "link": "/ko/how-to/sdk-with-wagmi" + } + ] + }, + { + "text": "엔터프라이즈 SDK", + "collapsed": true, + "items": [ + { + "text": "개요", + "link": "/ko/explanation/enterprise-sdk" + }, + { + "text": "트랜잭션 릴레이", + "link": "/ko/how-to/relay-with-gas-waiver" + }, + { + "text": "블록 공간 보장", + "link": "/ko/how-to/send-guaranteed-transactions" + }, + { + "text": "보장된 릴레이 트랜잭션", + "link": "/ko/how-to/guaranteed-relayed-transactions" + }, + { + "text": "참조", + "link": "/ko/reference/enterprise-sdk" + } + ] + } + ] + }, + { + "text": "Stable 노드 실행", "collapsed": true, "items": [ { @@ -1305,7 +1315,7 @@ "link": "/ko/how-to/use-node-snapshots" }, { - "text": "검증자 실행", + "text": "유효성 검사기 실행", "link": "/ko/how-to/run-validator" }, { @@ -1335,7 +1345,7 @@ "link": "/ko/explanation/ai-agents-guides" }, { - "text": "x402 및 MPP 통해 지불", + "text": "x402 및 MPP로 결제", "collapsed": true, "items": [ { @@ -1351,7 +1361,7 @@ "link": "/ko/explanation/mpp-sessions" }, { - "text": "호출당 지불 구축", + "text": "통화당 지불 구축", "link": "/ko/how-to/build-pay-per-call" }, { @@ -1359,7 +1369,7 @@ "link": "/ko/how-to/build-mpp-endpoint" }, { - "text": "MCP로 지불", + "text": "MCP로 결제", "link": "/ko/how-to/pay-with-mcp" } ] @@ -1369,11 +1379,11 @@ "collapsed": true, "items": [ { - "text": "AI를 통한 개발", + "text": "AI로 개발", "link": "/ko/how-to/develop-with-ai" }, { - "text": "에이전트 퍼실리테이터", + "text": "에이전트 촉진자", "link": "/ko/reference/agentic-facilitators" }, { @@ -1391,15 +1401,15 @@ "collapsed": true, "items": [ { - "text": "学习总览", + "text": "学习概述", "link": "/cn/explanation/learn-overview" }, { - "text": "总览", + "text": "概述", "link": "/cn/explanation/overview" }, { - "text": "技术总览", + "text": "技术概述", "link": "/cn/explanation/tech-overview" }, { @@ -1411,7 +1421,7 @@ "link": "/cn/explanation/core-concepts" }, { - "text": "主要功能", + "text": "主要特点", "link": "/cn/explanation/key-features" }, { @@ -1423,7 +1433,7 @@ "link": "/cn/explanation/ethereum-compatibility" }, { - "text": "最终性", + "text": "终结性", "link": "/cn/explanation/finality" }, { @@ -1445,19 +1455,19 @@ "collapsed": true, "items": [ { - "text": "USDT0 功能总览", + "text": "USDT0 功能概述", "link": "/cn/explanation/usdt-features-overview" }, { - "text": "资金流", + "text": "资金流向", "link": "/cn/explanation/flow-of-funds" }, { - "text": "将 USDT0 跨链至 Stable", + "text": "将 USDT0 桥接到 Stable", "link": "/cn/explanation/usdt0-bridging" }, { - "text": "跨链桥安全性", + "text": "桥接安全", "link": "/cn/explanation/bridge-security" }, { @@ -1477,11 +1487,11 @@ "link": "/cn/explanation/guaranteed-blockspace" }, { - "text": "USDT 交易聚合器", + "text": "USDT 传输聚合器", "link": "/cn/explanation/usdt-transfer-aggregator" }, { - "text": "保密转账", + "text": "隐私传输", "link": "/cn/explanation/confidential-transfer" } ] @@ -1491,7 +1501,7 @@ "collapsed": true, "items": [ { - "text": "核心优化总览", + "text": "核心优化概述", "link": "/cn/explanation/core-optimization-overview" }, { @@ -1557,75 +1567,19 @@ "collapsed": true, "items": [ { - "text": "构建总览", + "text": "构建概述", "link": "/cn/explanation/build-overview" }, { "text": "快速开始", "link": "/cn/tutorial/quick-start" }, - { - "text": "Stable SDK", - "collapsed": true, - "items": [ - { - "text": "总览", - "link": "/cn/explanation/sdk-overview" - }, - { - "text": "快速入门", - "link": "/cn/tutorial/sdk-quickstart" - }, - { - "text": "参考", - "link": "/cn/reference/sdk" - }, - { - "text": "赚取收益", - "link": "/cn/how-to/earn-yield" - }, - { - "text": "Viem 集成", - "link": "/cn/how-to/sdk-with-viem" - }, - { - "text": "Wagmi 集成", - "link": "/cn/how-to/sdk-with-wagmi" - } - ] - }, - { - "text": "企业级 SDK", - "collapsed": true, - "items": [ - { - "text": "总览", - "link": "/cn/explanation/enterprise-sdk" - }, - { - "text": "中继交易", - "link": "/cn/how-to/relay-with-gas-waiver" - }, - { - "text": "保证区块空间", - "link": "/cn/how-to/send-guaranteed-transactions" - }, - { - "text": "保证中继交易", - "link": "/cn/how-to/guaranteed-relayed-transactions" - }, - { - "text": "参考", - "link": "/cn/reference/enterprise-sdk" - } - ] - }, { "text": "用户引导", "collapsed": true, "items": [ { - "text": "账户总览", + "text": "账户概述", "link": "/cn/explanation/accounts-overview" }, { @@ -1651,7 +1605,7 @@ "collapsed": true, "items": [ { - "text": "支付总览", + "text": "支付概述", "link": "/cn/explanation/payments-overview" }, { @@ -1663,7 +1617,7 @@ "collapsed": true, "items": [ { - "text": "发送首笔 USDT0", + "text": "发送您的第一个 USDT0", "link": "/cn/tutorial/send-usdt0" }, { @@ -1675,7 +1629,7 @@ "link": "/cn/how-to/work-with-usdt-gas" }, { - "text": "将 USDT0 跨链到 Stable", + "text": "将 USDT0 桥接到 Stable", "link": "/cn/tutorial/bridge-usdt0" } ] @@ -1693,7 +1647,7 @@ "link": "/cn/how-to/subscribe-and-collect" }, { - "text": "发票付款", + "text": "使用发票支付", "link": "/cn/how-to/pay-with-invoice" } ] @@ -1707,7 +1661,7 @@ "link": "/cn/explanation/erc-3009" }, { - "text": "支付用例总览", + "text": "支付用例概述", "link": "/cn/explanation/payment-use-cases-overview" }, { @@ -1735,11 +1689,11 @@ ] }, { - "text": "发布合约", + "text": "部署合约", "collapsed": true, "items": [ { - "text": "合约总览", + "text": "合约概述", "link": "/cn/explanation/contracts-overview" }, { @@ -1747,7 +1701,7 @@ "link": "/cn/explanation/contracts-guides" }, { - "text": "部署首个合约", + "text": "部署您的第一个合约", "collapsed": true, "items": [ { @@ -1769,7 +1723,7 @@ "collapsed": true, "items": [ { - "text": "系统模块总览", + "text": "系统模块概述", "link": "/cn/explanation/system-modules-overview" }, { @@ -1777,7 +1731,7 @@ "link": "/cn/how-to/use-system-modules" }, { - "text": "系统模块 API 总览", + "text": "系统模块 API 概述", "link": "/cn/reference/system-modules-api-overview" }, { @@ -1817,7 +1771,7 @@ "link": "/cn/how-to/track-unbonding" }, { - "text": "验证器数据索引", + "text": "索引验证器数据", "link": "/cn/how-to/index-validator-data" } ] @@ -1835,7 +1789,7 @@ "collapsed": true, "items": [ { - "text": "集成总览", + "text": "集成概述", "link": "/cn/explanation/integrate-overview" }, { @@ -1911,7 +1865,7 @@ "collapsed": true, "items": [ { - "text": "跨链桥", + "text": "桥接器", "link": "/cn/reference/bridges" }, { @@ -1931,7 +1885,7 @@ "link": "/cn/reference/network-routing" }, { - "text": "法币通道", + "text": "入口/出口", "link": "/cn/reference/ramps" }, { @@ -1969,11 +1923,77 @@ ] }, { - "text": "运营", + "text": "工具和 SDK", + "collapsed": true, + "items": [ + { + "text": "工具和 SDK 概述", + "link": "/cn/explanation/tools-overview" + }, + { + "text": "Stable SDK", + "collapsed": true, + "items": [ + { + "text": "概述", + "link": "/cn/explanation/sdk-overview" + }, + { + "text": "快速入门", + "link": "/cn/tutorial/sdk-quickstart" + }, + { + "text": "参考", + "link": "/cn/reference/sdk" + }, + { + "text": "赚取收益", + "link": "/cn/how-to/earn-yield" + }, + { + "text": "viem 集成", + "link": "/cn/how-to/sdk-with-viem" + }, + { + "text": "wagmi 集成", + "link": "/cn/how-to/sdk-with-wagmi" + } + ] + }, + { + "text": "企业 SDK", + "collapsed": true, + "items": [ + { + "text": "概述", + "link": "/cn/explanation/enterprise-sdk" + }, + { + "text": "中继交易", + "link": "/cn/how-to/relay-with-gas-waiver" + }, + { + "text": "保证区块空间", + "link": "/cn/how-to/send-guaranteed-transactions" + }, + { + "text": "保证中继交易", + "link": "/cn/how-to/guaranteed-relayed-transactions" + }, + { + "text": "参考", + "link": "/cn/reference/enterprise-sdk" + } + ] + } + ] + }, + { + "text": "运行 Stable 节点", "collapsed": true, "items": [ { - "text": "节点运营总览", + "text": "节点操作概述", "link": "/cn/reference/node-operations-overview" }, { @@ -2047,7 +2067,7 @@ "link": "/cn/how-to/build-mpp-endpoint" }, { - "text": "通过 MCP 支付", + "text": "使用 MCP 支付", "link": "/cn/how-to/pay-with-mcp" } ] @@ -2057,7 +2077,7 @@ "collapsed": true, "items": [ { - "text": "利用 AI 开发", + "text": "使用 AI 开发", "link": "/cn/how-to/develop-with-ai" }, {