From 07b7f1b51f6ef905ff434d9930ce889d145ac055 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Tue, 6 May 2025 11:00:35 +0100 Subject: [PATCH] switch to monorepo structure --- biome.json | 39 + bun.lock | 1218 +++++++++++++++++ bun.lockb | Bin 267244 -> 0 bytes eslint.config.js | 28 - package.json | 48 +- packages/core/.gitignore | 34 + packages/core/README.md | 15 + packages/core/package.json | 15 + packages/core/src/bookmark.ts | 18 + packages/core/src/user.ts | 13 + packages/core/tsconfig.json | 29 + packages/server/.gitignore | 34 + packages/server/README.md | 15 + packages/server/data.sqlite | 0 packages/server/package.json | 21 + packages/server/src/auth/auth.ts | 148 ++ packages/server/src/auth/session.ts | 135 ++ packages/server/src/bookmark/handlers.ts | 32 + packages/server/src/database.ts | 76 + packages/server/src/error.ts | 8 + packages/server/src/http-handler.ts | 22 + packages/server/src/server.ts | 31 + packages/server/src/user/user.ts | 62 + packages/server/tsconfig.json | 32 + README.md => packages/web/README.md | 0 index.html => packages/web/index.html | 0 packages/web/package.json | 42 + {public => packages/web/public}/favicon.svg | 0 packages/web/pwa-assets.config.ts | 9 + packages/web/src/PWABadge.css | 29 + packages/web/src/PWABadge.tsx | 80 ++ .../web/src}/app/-route-tree.gen.ts | 46 +- {src => packages/web/src}/app/__root.tsx | 8 +- .../web/src/app}/bookmarks.tsx | 223 ++- {src => packages/web/src}/app/index.tsx | 43 +- {src => packages/web/src}/assets/react.svg | 0 packages/web/src/auth.ts | 14 + .../web/src}/components/button.tsx | 11 +- packages/web/src/components/link.tsx | 10 + packages/web/src/index.css | 9 + packages/web/src/main.tsx | 20 + {src => packages/web/src}/vite-env.d.ts | 0 packages/web/tsconfig.app.json | 30 + packages/web/tsconfig.json | 7 + packages/web/tsconfig.node.json | 24 + vite.config.ts => packages/web/vite.config.ts | 14 +- pwa-assets.config.ts | 12 - src/PWABadge.css | 29 - src/PWABadge.tsx | 77 -- src/auth/auth.ts | 160 --- src/auth/session.ts | 134 -- src/bookmark/bookmark.ts | 18 - src/bookmark/handlers.ts | 35 - src/components/link.tsx | 21 - src/database.ts | 62 - src/index.css | 9 - src/main.tsx | 15 - src/server-main.ts | 27 - src/server-util.ts | 30 - src/user/user.ts | 67 - tsconfig.app.json | 32 - tsconfig.json | 7 - tsconfig.node.json | 24 - 63 files changed, 2440 insertions(+), 1011 deletions(-) create mode 100644 biome.json create mode 100644 bun.lock delete mode 100755 bun.lockb delete mode 100644 eslint.config.js create mode 100644 packages/core/.gitignore create mode 100644 packages/core/README.md create mode 100644 packages/core/package.json create mode 100644 packages/core/src/bookmark.ts create mode 100644 packages/core/src/user.ts create mode 100644 packages/core/tsconfig.json create mode 100644 packages/server/.gitignore create mode 100644 packages/server/README.md create mode 100644 packages/server/data.sqlite create mode 100644 packages/server/package.json create mode 100644 packages/server/src/auth/auth.ts create mode 100644 packages/server/src/auth/session.ts create mode 100644 packages/server/src/bookmark/handlers.ts create mode 100644 packages/server/src/database.ts create mode 100644 packages/server/src/error.ts create mode 100644 packages/server/src/http-handler.ts create mode 100644 packages/server/src/server.ts create mode 100644 packages/server/src/user/user.ts create mode 100644 packages/server/tsconfig.json rename README.md => packages/web/README.md (100%) rename index.html => packages/web/index.html (100%) create mode 100644 packages/web/package.json rename {public => packages/web/public}/favicon.svg (100%) create mode 100644 packages/web/pwa-assets.config.ts create mode 100644 packages/web/src/PWABadge.css create mode 100644 packages/web/src/PWABadge.tsx rename {src => packages/web/src}/app/-route-tree.gen.ts (67%) rename {src => packages/web/src}/app/__root.tsx (71%) rename {src/app/$username => packages/web/src/app}/bookmarks.tsx (53%) rename {src => packages/web/src}/app/index.tsx (54%) rename {src => packages/web/src}/assets/react.svg (100%) create mode 100644 packages/web/src/auth.ts rename {src => packages/web/src}/components/button.tsx (65%) create mode 100644 packages/web/src/components/link.tsx create mode 100644 packages/web/src/index.css create mode 100644 packages/web/src/main.tsx rename {src => packages/web/src}/vite-env.d.ts (100%) create mode 100644 packages/web/tsconfig.app.json create mode 100644 packages/web/tsconfig.json create mode 100644 packages/web/tsconfig.node.json rename vite.config.ts => packages/web/vite.config.ts (83%) delete mode 100644 pwa-assets.config.ts delete mode 100644 src/PWABadge.css delete mode 100644 src/PWABadge.tsx delete mode 100644 src/auth/auth.ts delete mode 100644 src/auth/session.ts delete mode 100644 src/bookmark/bookmark.ts delete mode 100644 src/bookmark/handlers.ts delete mode 100644 src/components/link.tsx delete mode 100644 src/database.ts delete mode 100644 src/index.css delete mode 100644 src/main.tsx delete mode 100644 src/server-main.ts delete mode 100644 src/server-util.ts delete mode 100644 src/user/user.ts delete mode 100644 tsconfig.app.json delete mode 100644 tsconfig.json delete mode 100644 tsconfig.node.json diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..4b225ff --- /dev/null +++ b/biome.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "semicolons": "asNeeded", + "indentStyle": "tab", + "indentWidth": 2, + "lineWidth": 120 + } + }, + "json": { + "parser": { + "allowComments": true + } + } +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..a9a6f51 --- /dev/null +++ b/bun.lock @@ -0,0 +1,1218 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "markone", + "devDependencies": { + "@biomejs/biome": "1.9.4", + }, + }, + "packages/core": { + "name": "@markone/core", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/server": { + "name": "server", + "dependencies": { + "arktype": "^2.1.20", + "uid-safe": "^2.1.5", + "ulid": "^3.0.0", + }, + "devDependencies": { + "@types/bun": "^1.2.12", + "@types/uid-safe": "^2.1.5", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/web": { + "name": "@markone/web", + "version": "0.0.0", + "dependencies": { + "@markone/core": "workspace:*", + "@tailwindcss/vite": "^4.1.5", + "@tanstack/react-query": "^5.75.2", + "@tanstack/react-router": "^1.119.0", + "clsx": "^2.1.1", + "dayjs": "^1.11.13", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "tailwindcss": "^4.1.5", + "zustand": "^5.0.4", + }, + "devDependencies": { + "@tanstack/react-router-devtools": "^1.119.1", + "@tanstack/router-plugin": "^1.119.0", + "@types/node": "^22.15.3", + "@types/react": "^19.0.8", + "@types/react-dom": "^19.0.3", + "@vite-pwa/assets-generator": "^0.2.6", + "@vitejs/plugin-react": "^4.2.1", + "globals": "^15.14.0", + "typescript": "~5.7.2", + "vite": "^6.0.11", + "vite-plugin-pwa": "^0.21.1", + "workbox-core": "^7.3.0", + "workbox-window": "^7.3.0", + }, + }, + }, + "trustedDependencies": [ + "@biomejs/biome", + ], + "packages": { + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@antfu/utils": ["@antfu/utils@0.7.10", "", {}, "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww=="], + + "@apideck/better-ajv-errors": ["@apideck/better-ajv-errors@0.3.6", "", { "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", "leven": "^3.1.0" }, "peerDependencies": { "ajv": ">=8" } }, "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA=="], + + "@ark/schema": ["@ark/schema@0.46.0", "", { "dependencies": { "@ark/util": "0.46.0" } }, "sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ=="], + + "@ark/util": ["@ark/util@0.46.0", "", {}, "sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/compat-data": ["@babel/compat-data@7.27.1", "", {}, "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A=="], + + "@babel/core": ["@babel/core@7.27.1", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-module-transforms": "^7.27.1", "@babel/helpers": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/template": "^7.27.1", "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1", "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-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ=="], + + "@babel/generator": ["@babel/generator@7.27.1", "", { "dependencies": { "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w=="], + + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.1", "", { "dependencies": { "@babel/compat-data": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g=="], + + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A=="], + + "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ=="], + + "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@0.6.4", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw=="], + + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g=="], + + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-remap-async-to-generator": ["@babel/helper-remap-async-to-generator@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA=="], + + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.27.1", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA=="], + + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.27.1", "", { "dependencies": { "@babel/template": "^7.27.1", "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ=="], + + "@babel/helpers": ["@babel/helpers@7.27.1", "", { "dependencies": { "@babel/template": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ=="], + + "@babel/parser": ["@babel/parser@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" }, "bin": "./bin/babel-parser.js" }, "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ=="], + + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA=="], + + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ["@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA=="], + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA=="], + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw=="], + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw=="], + + "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], + + "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg=="], + + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="], + + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], + + "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], + + "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], + + "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA=="], + + "@babel/plugin-transform-async-to-generator": ["@babel/plugin-transform-async-to-generator@7.27.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA=="], + + "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg=="], + + "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw=="], + + "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA=="], + + "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA=="], + + "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/traverse": "^7.27.1", "globals": "^11.1.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA=="], + + "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/template": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw=="], + + "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q=="], + + "@babel/plugin-transform-dotall-regex": ["@babel/plugin-transform-dotall-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw=="], + + "@babel/plugin-transform-duplicate-keys": ["@babel/plugin-transform-duplicate-keys@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q=="], + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ=="], + + "@babel/plugin-transform-dynamic-import": ["@babel/plugin-transform-dynamic-import@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A=="], + + "@babel/plugin-transform-exponentiation-operator": ["@babel/plugin-transform-exponentiation-operator@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ=="], + + "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ=="], + + "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw=="], + + "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.27.1", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ=="], + + "@babel/plugin-transform-json-strings": ["@babel/plugin-transform-json-strings@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q=="], + + "@babel/plugin-transform-literals": ["@babel/plugin-transform-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA=="], + + "@babel/plugin-transform-logical-assignment-operators": ["@babel/plugin-transform-logical-assignment-operators@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw=="], + + "@babel/plugin-transform-member-expression-literals": ["@babel/plugin-transform-member-expression-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ=="], + + "@babel/plugin-transform-modules-amd": ["@babel/plugin-transform-modules-amd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA=="], + + "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw=="], + + "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA=="], + + "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w=="], + + "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng=="], + + "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ=="], + + "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA=="], + + "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw=="], + + "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.27.1", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-transform-parameters": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA=="], + + "@babel/plugin-transform-object-super": ["@babel/plugin-transform-object-super@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng=="], + + "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q=="], + + "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg=="], + + "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg=="], + + "@babel/plugin-transform-private-methods": ["@babel/plugin-transform-private-methods@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA=="], + + "@babel/plugin-transform-private-property-in-object": ["@babel/plugin-transform-private-property-in-object@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ=="], + + "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + + "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw=="], + + "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA=="], + + "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw=="], + + "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], + + "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q=="], + + "@babel/plugin-transform-sticky-regex": ["@babel/plugin-transform-sticky-regex@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g=="], + + "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg=="], + + "@babel/plugin-transform-typeof-symbol": ["@babel/plugin-transform-typeof-symbol@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw=="], + + "@babel/plugin-transform-unicode-escapes": ["@babel/plugin-transform-unicode-escapes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg=="], + + "@babel/plugin-transform-unicode-property-regex": ["@babel/plugin-transform-unicode-property-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q=="], + + "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw=="], + + "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw=="], + + "@babel/preset-env": ["@babel/preset-env@7.27.1", "", { "dependencies": { "@babel/compat-data": "^7.27.1", "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.27.1", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.27.1", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-classes": "^7.27.1", "@babel/plugin-transform-computed-properties": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.27.1", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-exponentiation-operator": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-modules-systemjs": "^7.27.1", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", "@babel/plugin-transform-object-rest-spread": "^7.27.1", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1", "@babel/plugin-transform-parameters": "^7.27.1", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.27.1", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.27.1", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.27.1", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA=="], + + "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], + + "@babel/runtime": ["@babel/runtime@7.27.1", "", {}, "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog=="], + + "@babel/template": ["@babel/template@7.27.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg=="], + + "@babel/traverse": ["@babel/traverse@7.27.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/template": "^7.27.1", "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg=="], + + "@babel/types": ["@babel/types@7.27.1", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q=="], + + "@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@1.9.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@1.9.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="], + + "@canvas/image-data": ["@canvas/image-data@1.0.0", "", {}, "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.3", "", { "os": "android", "cpu": "arm" }, "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.3", "", { "os": "android", "cpu": "arm64" }, "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.3", "", { "os": "android", "cpu": "x64" }, "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.3", "", { "os": "linux", "cpu": "arm" }, "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.3", "", { "os": "linux", "cpu": "x64" }, "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.3", "", { "os": "none", "cpu": "arm64" }, "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.3", "", { "os": "none", "cpu": "x64" }, "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.6", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@markone/core": ["@markone/core@workspace:packages/core"], + + "@markone/web": ["@markone/web@workspace:packages/web"], + + "@rollup/plugin-babel": ["@rollup/plugin-babel@5.3.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^1.20.0||^2.0.0" }, "optionalPeers": ["@types/babel__core"] }, "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q=="], + + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@15.3.1", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA=="], + + "@rollup/plugin-replace": ["@rollup/plugin-replace@2.4.2", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="], + + "@rollup/plugin-terser": ["@rollup/plugin-terser@0.4.4", "", { "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.1", "", { "os": "android", "cpu": "arm" }, "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.1", "", { "os": "android", "cpu": "arm64" }, "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA=="], + + "@surma/rollup-plugin-off-main-thread": ["@surma/rollup-plugin-off-main-thread@2.2.3", "", { "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", "magic-string": "^0.25.0", "string.prototype.matchall": "^4.0.6" } }, "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.1.5", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.29.2", "tailwindcss": "4.1.5" } }, "sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.5", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.5", "@tailwindcss/oxide-darwin-arm64": "4.1.5", "@tailwindcss/oxide-darwin-x64": "4.1.5", "@tailwindcss/oxide-freebsd-x64": "4.1.5", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.5", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.5", "@tailwindcss/oxide-linux-arm64-musl": "4.1.5", "@tailwindcss/oxide-linux-x64-gnu": "4.1.5", "@tailwindcss/oxide-linux-x64-musl": "4.1.5", "@tailwindcss/oxide-wasm32-wasi": "4.1.5", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.5", "@tailwindcss/oxide-win32-x64-msvc": "4.1.5" } }, "sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.5", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@emnapi/wasi-threads": "^1.0.2", "@napi-rs/wasm-runtime": "^0.2.9", "@tybys/wasm-util": "^0.9.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.5", "", { "dependencies": { "@tailwindcss/node": "4.1.5", "@tailwindcss/oxide": "4.1.5", "tailwindcss": "4.1.5" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, "sha512-FE1stRoqdHSb7RxesMfCXE8icwI1W6zGE/512ae3ZDrpkQYTTYeSyUJPRCjZd8CwVAhpDUbi1YR8pcZioFJQ/w=="], + + "@tanstack/history": ["@tanstack/history@1.115.0", "", {}, "sha512-K7JJNrRVvyjAVnbXOH2XLRhFXDkeP54Kt2P4FR1Kl2KDGlIbkua5VqZQD2rot3qaDrpufyUa63nuLai1kOLTsQ=="], + + "@tanstack/query-core": ["@tanstack/query-core@5.75.0", "", {}, "sha512-rk8KQuCdhoRkzjRVF3QxLgAfFUyS0k7+GCQjlGEpEGco+qazJ0eMH6aO1DjDjibH7/ik383nnztua3BG+lOnwg=="], + + "@tanstack/react-query": ["@tanstack/react-query@5.75.2", "", { "dependencies": { "@tanstack/query-core": "5.75.0" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-8F8VOsWUfSkCFoi62O9HSZT9jDgg28Ln8Z2dYKfRo/O2A0sgvr0uxTuNoon3PPXoDuHofv5V3elBI1M2Gh1MPg=="], + + "@tanstack/react-router": ["@tanstack/react-router@1.119.0", "", { "dependencies": { "@tanstack/history": "1.115.0", "@tanstack/react-store": "^0.7.0", "@tanstack/router-core": "1.119.0", "jsesc": "^3.1.0", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-wjT8zQAXsCfsWXiKhqJcarAsvOIUjnTBIFb2tTtO/2AD7rjD7VPaRpkFhqs8TdvuSEqv+V/9xfN/eTeBLUdr1g=="], + + "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.119.1", "", { "dependencies": { "@tanstack/router-devtools-core": "^1.119.0", "solid-js": "^1.9.5" }, "peerDependencies": { "@tanstack/react-router": "^1.119.0", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-pM+80Yu5k2pe2LxW9kqk+r4j2RhJKol4mvH7Tdwr9R6LaR2ZNmnoMVPXikaIYOfCk/B4rmWMfk5M0DTlOm6iBg=="], + + "@tanstack/react-store": ["@tanstack/react-store@0.7.0", "", { "dependencies": { "@tanstack/store": "0.7.0", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-S/Rq17HaGOk+tQHV/yrePMnG1xbsKZIl/VsNWnNXt4XW+tTY8dTlvpJH2ZQ3GRALsusG5K6Q3unAGJ2pd9W/Ng=="], + + "@tanstack/router-core": ["@tanstack/router-core@1.119.0", "", { "dependencies": { "@tanstack/history": "1.115.0", "@tanstack/store": "^0.7.0", "tiny-invariant": "^1.3.3" } }, "sha512-3dZYP5cCq3jJYgnRDzKR3w4sYzrXP5sw1st303ye87VV26r31I8UaIuUEs7kiJaxgWBvqHglWCiygBWQODZXVw=="], + + "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.119.0", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16" }, "peerDependencies": { "@tanstack/router-core": "^1.119.0", "csstype": "^3.0.10", "solid-js": ">=1.9.5", "tiny-invariant": "^1.3.3" }, "optionalPeers": ["csstype"] }, "sha512-CH2Hx4J2UOigFtKR0anQfNiWQfidV2S7AZafkeo/S885IxwoFK7xXWzYxNbUhCDJC2tsBJ+XKjgxeBv5wGi62Q=="], + + "@tanstack/router-generator": ["@tanstack/router-generator@1.119.0", "", { "dependencies": { "@tanstack/virtual-file-routes": "^1.115.0", "prettier": "^3.5.0", "tsx": "^4.19.2", "zod": "^3.24.2" }, "peerDependencies": { "@tanstack/react-router": "^1.119.0" }, "optionalPeers": ["@tanstack/react-router"] }, "sha512-wvHdDlWgodvlb6RE6j65j7LlH0Ex+CnxpHBkxKkJ0wPPXHow/run4/jeaF9cxUEXrp+wO4DvxZRxtzMmA6YzNA=="], + + "@tanstack/router-plugin": ["@tanstack/router-plugin@1.119.0", "", { "dependencies": { "@babel/core": "^7.26.8", "@babel/plugin-syntax-jsx": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9", "@babel/template": "^7.26.8", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@tanstack/router-core": "^1.119.0", "@tanstack/router-generator": "^1.119.0", "@tanstack/router-utils": "^1.115.0", "@tanstack/virtual-file-routes": "^1.115.0", "@types/babel__core": "^7.20.5", "@types/babel__template": "^7.4.4", "@types/babel__traverse": "^7.20.6", "babel-dead-code-elimination": "^1.0.10", "chokidar": "^3.6.0", "unplugin": "^2.1.2", "zod": "^3.24.2" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", "@tanstack/react-router": "^1.119.0", "vite": ">=5.0.0 || >=6.0.0", "vite-plugin-solid": "^2.11.2", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-c4vzCoWzXLjFfZwnGiVgrAtgM3DqkqiMxodlvlz1etj7C3Ulx44sitJmosF25HL7gwuUPfQCvFKDYFifT0GBAA=="], + + "@tanstack/router-utils": ["@tanstack/router-utils@1.115.0", "", { "dependencies": { "@babel/generator": "^7.26.8", "@babel/parser": "^7.26.8", "ansis": "^3.11.0", "diff": "^7.0.0" } }, "sha512-Dng4y+uLR9b5zPGg7dHReHOTHQa6x+G6nCoZshsDtWrYsrdCcJEtLyhwZ5wG8OyYS6dVr/Cn+E5Bd2b6BhJ89w=="], + + "@tanstack/store": ["@tanstack/store@0.7.0", "", {}, "sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg=="], + + "@tanstack/virtual-file-routes": ["@tanstack/virtual-file-routes@1.115.0", "", {}, "sha512-XLUh1Py3AftcERrxkxC5Y5m5mfllRH3YR6YVlyjFgI2Tc2Ssy2NKmQFQIafoxfW459UJ8Dn81nWKETEIJifE4g=="], + + "@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.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], + + "@types/bun": ["@types/bun@1.2.12", "", { "dependencies": { "bun-types": "1.2.12" } }, "sha512-lY/GQTXDGsolT/TiH72p1tuyUORuRrdV7VwOTOjDOt8uTBJQOJc5zz3ufwwDl0VBaoxotSk4LdP0hhjLJ6ypIQ=="], + + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "@types/node": ["@types/node@22.15.8", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-VINDWfc4C3DGAa1J+riYRHjzt+IFj5eRaEl768ze7ZqXcjyN/4WHxPLAWMLTwmODpPvFyzuMTAT6A4RMOHlg5g=="], + + "@types/react": ["@types/react@19.1.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw=="], + + "@types/react-dom": ["@types/react-dom@19.1.3", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg=="], + + "@types/resolve": ["@types/resolve@1.20.2", "", {}, "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="], + + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + + "@types/uid-safe": ["@types/uid-safe@2.1.5", "", {}, "sha512-RwEfbxqXKEay2b5p8QQVllfnMbVPUZChiKKZ2M6+OSRRmvr4HTCCUZTWhr/QlmrMnNE0ViNBBbP1+5plF9OGRw=="], + + "@vite-pwa/assets-generator": ["@vite-pwa/assets-generator@0.2.6", "", { "dependencies": { "cac": "^6.7.14", "colorette": "^2.0.20", "consola": "^3.2.3", "sharp": "^0.32.6", "sharp-ico": "^0.1.5", "unconfig": "^0.3.11" }, "bin": { "pwa-assets-generator": "bin/pwa-assets-generator.mjs" } }, "sha512-kK44dXltvoubEo5B+6tCGjUrOWOE1+dA4DForbFpO1rKy2wSkAVGrs8tyfN6DzTig89/QKyV8XYodgmaKyrYng=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.4.1", "", { "dependencies": { "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w=="], + + "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + + "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "ansis": ["ansis@3.17.0", "", {}, "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "arktype": ["arktype@2.1.20", "", { "dependencies": { "@ark/schema": "0.46.0", "@ark/util": "0.46.0" } }, "sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + + "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], + + "babel-dead-code-elimination": ["babel-dead-code-elimination@1.0.10", "", { "dependencies": { "@babel/core": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" } }, "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA=="], + + "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.13", "", { "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g=="], + + "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.11.1", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.3", "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ=="], + + "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.4", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "bare-events": ["bare-events@2.5.4", "", {}, "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA=="], + + "bare-fs": ["bare-fs@4.1.4", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-r8+26Voz8dGX3AYpJdFb1ZPaUSM8XOLCZvy+YGpRTmwPHIxA7Z3Jov/oMPtV7hfRQbOnH8qGlLTzQAbgtdNN0Q=="], + + "bare-os": ["bare-os@3.6.1", "", {}, "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g=="], + + "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], + + "bare-stream": ["bare-stream@2.6.5", "", { "dependencies": { "streamx": "^2.21.0" }, "peerDependencies": { "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-buffer", "bare-events"] }, "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.24.5", "", { "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw=="], + + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "bun-types": ["bun-types@1.2.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-tvWMx5vPqbRXgE8WUZI94iS1xAYs8bkqESR9cxBB1Wi+urvfTrF1uzuDgBHFAdO0+d2lmsbG3HmeKMvUyj6pWA=="], + + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001717", "", {}, "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], + + "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + + "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "common-tags": ["common-tags@1.8.2", "", {}, "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "core-js-compat": ["core-js-compat@3.42.0", "", { "dependencies": { "browserslist": "^4.24.4" } }, "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ=="], + + "crypto-random-string": ["crypto-random-string@2.0.0", "", {}, "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], + + "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], + + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], + + "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "decode-bmp": ["decode-bmp@0.2.1", "", { "dependencies": { "@canvas/image-data": "^1.0.0", "to-data-view": "^1.1.0" } }, "sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA=="], + + "decode-ico": ["decode-ico@0.4.1", "", { "dependencies": { "@canvas/image-data": "^1.0.0", "decode-bmp": "^0.2.0", "to-data-view": "^1.1.0" } }, "sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA=="], + + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "diff": ["diff@7.0.0", "", {}, "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.150", "", {}, "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA=="], + + "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], + + "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], + + "es-abstract": ["es-abstract@1.23.9", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.0", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.18" } }, "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + + "esbuild": ["esbuild@0.25.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.3", "@esbuild/android-arm": "0.25.3", "@esbuild/android-arm64": "0.25.3", "@esbuild/android-x64": "0.25.3", "@esbuild/darwin-arm64": "0.25.3", "@esbuild/darwin-x64": "0.25.3", "@esbuild/freebsd-arm64": "0.25.3", "@esbuild/freebsd-x64": "0.25.3", "@esbuild/linux-arm": "0.25.3", "@esbuild/linux-arm64": "0.25.3", "@esbuild/linux-ia32": "0.25.3", "@esbuild/linux-loong64": "0.25.3", "@esbuild/linux-mips64el": "0.25.3", "@esbuild/linux-ppc64": "0.25.3", "@esbuild/linux-riscv64": "0.25.3", "@esbuild/linux-s390x": "0.25.3", "@esbuild/linux-x64": "0.25.3", "@esbuild/netbsd-arm64": "0.25.3", "@esbuild/netbsd-x64": "0.25.3", "@esbuild/openbsd-arm64": "0.25.3", "@esbuild/openbsd-x64": "0.25.3", "@esbuild/sunos-x64": "0.25.3", "@esbuild/win32-arm64": "0.25.3", "@esbuild/win32-ia32": "0.25.3", "@esbuild/win32-x64": "0.25.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + + "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + + "filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + + "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-own-enumerable-property-symbols": ["get-own-enumerable-property-symbols@3.0.2", "", {}, "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], + + "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="], + + "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "globals": ["globals@15.15.0", "", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], + + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + + "goober": ["goober@2.1.16", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "ico-endec": ["ico-endec@0.1.6", "", {}, "sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ=="], + + "idb": ["idb@7.1.1", "", {}, "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], + + "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], + + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], + + "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-obj": ["is-obj@1.0.1", "", {}, "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-regexp": ["is-regexp@1.0.0", "", {}, "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA=="], + + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], + + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "jake": ["jake@10.9.2", "", { "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.4", "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" } }, "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA=="], + + "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], + + "jsonpointer": ["jsonpointer@5.0.1", "", {}, "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="], + + "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], + + "lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.2", "", { "os": "linux", "cpu": "arm" }, "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.2", "", { "os": "win32", "cpu": "x64" }, "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + + "lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + + "node-abi": ["node-abi@3.75.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg=="], + + "node-addon-api": ["node-addon-api@6.1.0", "", {}, "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="], + + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], + + "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], + + "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], + + "pretty-bytes": ["pretty-bytes@6.1.1", "", {}, "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ=="], + + "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "random-bytes": ["random-bytes@1.0.0", "", {}, "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + + "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], + + "react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="], + + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + + "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=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + + "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], + + "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.0", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "regexpu-core": ["regexpu-core@6.2.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } }, "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA=="], + + "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], + + "regjsparser": ["regjsparser@0.12.0", "", { "dependencies": { "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "rollup": ["rollup@4.40.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.1", "@rollup/rollup-android-arm64": "4.40.1", "@rollup/rollup-darwin-arm64": "4.40.1", "@rollup/rollup-darwin-x64": "4.40.1", "@rollup/rollup-freebsd-arm64": "4.40.1", "@rollup/rollup-freebsd-x64": "4.40.1", "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", "@rollup/rollup-linux-arm-musleabihf": "4.40.1", "@rollup/rollup-linux-arm64-gnu": "4.40.1", "@rollup/rollup-linux-arm64-musl": "4.40.1", "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-musl": "4.40.1", "@rollup/rollup-linux-s390x-gnu": "4.40.1", "@rollup/rollup-linux-x64-gnu": "4.40.1", "@rollup/rollup-linux-x64-musl": "4.40.1", "@rollup/rollup-win32-arm64-msvc": "4.40.1", "@rollup/rollup-win32-ia32-msvc": "4.40.1", "@rollup/rollup-win32-x64-msvc": "4.40.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw=="], + + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + + "seroval": ["seroval@1.2.1", "", {}, "sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw=="], + + "seroval-plugins": ["seroval-plugins@1.2.1", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw=="], + + "server": ["server@workspace:packages/server"], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + + "sharp": ["sharp@0.32.6", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.2", "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.1", "semver": "^7.5.4", "simple-get": "^4.0.1", "tar-fs": "^3.0.4", "tunnel-agent": "^0.6.0" } }, "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w=="], + + "sharp-ico": ["sharp-ico@0.1.5", "", { "dependencies": { "decode-ico": "*", "ico-endec": "*", "sharp": "*" } }, "sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + + "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + + "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], + + "smob": ["smob@1.5.0", "", {}, "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig=="], + + "solid-js": ["solid-js@1.9.6", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "^1.1.0", "seroval-plugins": "^1.1.0" } }, "sha512-PoasAJvLk60hRtOTe9ulvALOdLjjqxuxcGZRolBQqxOnXrBXHGzqMT4ijNhGsDAYdOgEa8ZYaAE94PSldrFSkA=="], + + "source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "sourcemap-codec": ["sourcemap-codec@1.4.8", "", {}, "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="], + + "streamx": ["streamx@2.22.0", "", { "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw=="], + + "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], + + "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + + "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "stringify-object": ["stringify-object@3.3.0", "", { "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" } }, "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw=="], + + "strip-comments": ["strip-comments@2.0.1", "", {}, "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw=="], + + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "tailwindcss": ["tailwindcss@4.1.5", "", {}, "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA=="], + + "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + + "tar-fs": ["tar-fs@3.0.8", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg=="], + + "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + + "temp-dir": ["temp-dir@2.0.0", "", {}, "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg=="], + + "tempy": ["tempy@0.6.0", "", { "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" } }, "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw=="], + + "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], + + "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], + + "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], + + "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], + + "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], + + "to-data-view": ["to-data-view@1.1.0", "", {}, "sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], + + "tsx": ["tsx@4.19.4", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + + "type-fest": ["type-fest@0.16.0", "", {}, "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], + + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + + "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + + "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + + "uid-safe": ["uid-safe@2.1.5", "", { "dependencies": { "random-bytes": "~1.0.0" } }, "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA=="], + + "ulid": ["ulid@3.0.0", "", { "bin": { "ulid": "dist/cli.js" } }, "sha512-yvZYdXInnJve6LdlPIuYmURdS2NP41ZoF4QW7SXwbUKYt53+0eDAySO+rGSvM2O/ciuB/G+8N7GQrZ1mCJpuqw=="], + + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + + "unconfig": ["unconfig@0.3.13", "", { "dependencies": { "@antfu/utils": "^0.7.7", "defu": "^6.1.4", "jiti": "^1.21.0" } }, "sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], + + "unicode-match-property-ecmascript": ["unicode-match-property-ecmascript@2.0.0", "", { "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="], + + "unicode-match-property-value-ecmascript": ["unicode-match-property-value-ecmascript@2.2.0", "", {}, "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg=="], + + "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.1.0", "", {}, "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w=="], + + "unique-string": ["unique-string@2.0.0", "", { "dependencies": { "crypto-random-string": "^2.0.0" } }, "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "unplugin": ["unplugin@2.3.2", "", { "dependencies": { "acorn": "^8.14.1", "picomatch": "^4.0.2", "webpack-virtual-modules": "^0.6.2" } }, "sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w=="], + + "upath": ["upath@1.2.0", "", {}, "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], + + "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], + + "vite-plugin-pwa": ["vite-plugin-pwa@0.21.2", "", { "dependencies": { "debug": "^4.3.6", "pretty-bytes": "^6.1.1", "tinyglobby": "^0.2.10", "workbox-build": "^7.3.0", "workbox-window": "^7.3.0" }, "peerDependencies": { "@vite-pwa/assets-generator": "^0.2.6", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["@vite-pwa/assets-generator"] }, "sha512-vFhH6Waw8itNu37hWUJxL50q+CBbNcMVzsKaYHQVrfxTt3ihk3PeLO22SbiP1UNWzcEPaTQv+YVxe4G0KOjAkg=="], + + "webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], + + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], + + "whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], + + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], + + "workbox-background-sync": ["workbox-background-sync@7.3.0", "", { "dependencies": { "idb": "^7.0.1", "workbox-core": "7.3.0" } }, "sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg=="], + + "workbox-broadcast-update": ["workbox-broadcast-update@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0" } }, "sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA=="], + + "workbox-build": ["workbox-build@7.3.0", "", { "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.24.4", "@babel/preset-env": "^7.11.0", "@babel/runtime": "^7.11.2", "@rollup/plugin-babel": "^5.2.0", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-replace": "^2.4.1", "@rollup/plugin-terser": "^0.4.3", "@surma/rollup-plugin-off-main-thread": "^2.2.3", "ajv": "^8.6.0", "common-tags": "^1.8.0", "fast-json-stable-stringify": "^2.1.0", "fs-extra": "^9.0.1", "glob": "^7.1.6", "lodash": "^4.17.20", "pretty-bytes": "^5.3.0", "rollup": "^2.43.1", "source-map": "^0.8.0-beta.0", "stringify-object": "^3.3.0", "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", "workbox-background-sync": "7.3.0", "workbox-broadcast-update": "7.3.0", "workbox-cacheable-response": "7.3.0", "workbox-core": "7.3.0", "workbox-expiration": "7.3.0", "workbox-google-analytics": "7.3.0", "workbox-navigation-preload": "7.3.0", "workbox-precaching": "7.3.0", "workbox-range-requests": "7.3.0", "workbox-recipes": "7.3.0", "workbox-routing": "7.3.0", "workbox-strategies": "7.3.0", "workbox-streams": "7.3.0", "workbox-sw": "7.3.0", "workbox-window": "7.3.0" } }, "sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ=="], + + "workbox-cacheable-response": ["workbox-cacheable-response@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0" } }, "sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA=="], + + "workbox-core": ["workbox-core@7.3.0", "", {}, "sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw=="], + + "workbox-expiration": ["workbox-expiration@7.3.0", "", { "dependencies": { "idb": "^7.0.1", "workbox-core": "7.3.0" } }, "sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ=="], + + "workbox-google-analytics": ["workbox-google-analytics@7.3.0", "", { "dependencies": { "workbox-background-sync": "7.3.0", "workbox-core": "7.3.0", "workbox-routing": "7.3.0", "workbox-strategies": "7.3.0" } }, "sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg=="], + + "workbox-navigation-preload": ["workbox-navigation-preload@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0" } }, "sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg=="], + + "workbox-precaching": ["workbox-precaching@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0", "workbox-routing": "7.3.0", "workbox-strategies": "7.3.0" } }, "sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw=="], + + "workbox-range-requests": ["workbox-range-requests@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0" } }, "sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ=="], + + "workbox-recipes": ["workbox-recipes@7.3.0", "", { "dependencies": { "workbox-cacheable-response": "7.3.0", "workbox-core": "7.3.0", "workbox-expiration": "7.3.0", "workbox-precaching": "7.3.0", "workbox-routing": "7.3.0", "workbox-strategies": "7.3.0" } }, "sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg=="], + + "workbox-routing": ["workbox-routing@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0" } }, "sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A=="], + + "workbox-strategies": ["workbox-strategies@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0" } }, "sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg=="], + + "workbox-streams": ["workbox-streams@7.3.0", "", { "dependencies": { "workbox-core": "7.3.0", "workbox-routing": "7.3.0" } }, "sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw=="], + + "workbox-sw": ["workbox-sw@7.3.0", "", {}, "sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA=="], + + "workbox-window": ["workbox-window@7.3.0", "", { "dependencies": { "@types/trusted-types": "^2.0.2", "workbox-core": "7.3.0" } }, "sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + + "zustand": ["zustand@5.0.4", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-39VFTN5InDtMd28ZhjLyuTnlytDr9HfwO512Ai4I8ZABCoyAj4F1+sr7sD1jP/+p7k77Iko0Pb5NhgBFDCX0kQ=="], + + "@babel/plugin-transform-classes/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + + "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + + "@rollup/plugin-babel/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + + "@rollup/plugin-node-resolve/@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "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" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], + + "@rollup/plugin-replace/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + + "@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], + + "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "@rollup/pluginutils/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + + "@tailwindcss/node/jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.9", "", { "dependencies": { "@emnapi/core": "^1.4.0", "@emnapi/runtime": "^1.4.0", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "node-abi/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + + "prebuild-install/tar-fs": ["tar-fs@2.1.2", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA=="], + + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "regjsparser/jsesc": ["jsesc@3.0.2", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g=="], + + "sharp/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "workbox-build/pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], + + "workbox-build/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + + "@rollup/plugin-node-resolve/@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "prebuild-install/tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + } +} diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 14358ce9fa66f809c13b83826c8f72f4fcf20cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267244 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

}yW=i75gsWoobRnqYK95JZZ(28Xm zk-}E6`jmpZ;Aju5r~W;I^{+u@LxbGU^v{%hk4gQs!UWsCY-&lahR1gqtMHG7+~M$3 zv^KPyr1YL#j<4n;*c)BLPc@ZjeeCm${4i@X zt^L;^HX-n0c^}C#Eco6Lq(RquBh8Dwpjmt?w;Tt+=3)%aCb;>g1fr~cXxujySoOshX>Z3zn*yds8!R`Q(d!R zH^wXk8}io#6s^%B-zRY!zTyu?cLjznoyt`x@qB4q%z|K(`+wfvQ8co`vrCBM0^R)Y$REc?I!l zmyRD%cNMPSyEDETVmtGiG&BSz6}XRYcs&*0Jw`j$?xdyICFLEUh~SvwT82qD2CM;hKyrz~utEVjF^GYnL$W zp8{Q>pE#&-GKjZ$@jP(Sz7nzvTBOnqgsr-Jge1_*RxbSlmq0XV@ID;3e2liZcvS4z zm%So62DscncTGB}7IJ-jbBZjCIPCFv&X|k0LJm|w+U`aHeiD?17+24cr^V`>TO+9f zT#`!U#fHYAz5RvGWRbt4D+3d*F~H>ky7sc(t1DF1P|NY3a4i;Az|4KJOfcJPzc~c2 z1R6bFlls`1!sL8Q_ZAKLJZ$9&ds8srW?@~kh5|8cPgXLO51hmB0^Nk9N$DnM(0JHE z0~DM&j}4=oRI+dfXUew{r;v8O=k3W4IC74N&|*9b7$>?T4b;z`JO(t@rBa#l%f{@A z&A|Pa59lhStIDBSGC}y~{bjre^p$FI^WR;_DS@%HKNK?1d{)5!UJQG#I^(5*3*UZr z7yga?QzMz7p837CeT90YR5_}56@!N=!s78e+#LH z4iw(^aW}0;(*4550wQ1W&o)(7@Z>OxQql;KDM(F1hs6_2|FhojHvyn~3U-%=ohJBa z>%T82>)qY$zbU~AW|IBrs8_Gr#DQpjw~Vn!><;%)3_%`vYuE=UruZ}(8 zlNXU^r%uf;BOOvc)!cXArZqWyg9NxjKo?8E9))EdJqSCL0K%>HA0AY@j%O?xgzXAnI9*Ot5s=kCvi) zK*X2`a7BRbfI)E!=6wYu;aFr#pU7)^gv@^5kJQ9%wO|XR%=V_q6YaW-cH4gSmJU~{ zL#duB>Uo=$uPaB>2>#lCnsTXh7vPEkUE+GuZ@%bEcG_el z+)FevJ6OpX_rx|(aQjL_AA8H0i$G$JLf~^}Qp)N&2XfXF;Gs+gOFVx)&k}2KRMJPP5Atirt>{Y{ z@R-kF{;PXNsZy6U^^}HYJp{NCKo@-hx#{Eb#sIUOOkN&LM!3HUKjDUSaE0w>{T8rD zMmgH#N(4VcaL4vJFOO<6u9b^RU$Z~N+!>@$Mxk^|BJ- z;yi~XxHzbc8tASEXK^`sKg!VW1jk6TOc3-S6rMEc$K2{Z_lYi6 z#tTgtl0iU%JJe%I{Z!wW+NYp)+U2ON9pNMJ8#mU>VtwnK-uDL?pt~!X1pnt?*D_^1 zB@bG7+a?md@+yZePkAlgl6fhQ$#ML@Vo}B$$h|L%wRefx5~%2uHs1AuX>p5>=CRh$AAV=c zy1mUL-|MRYbbE?xMoqi_Oxp7FRYI@Ar)Kq&y;z8ySA8X^6)=>%XBG2t5O!vc)fM(Z z{1t6PrpjjRakf%b*|+5T;~oKS9N14P0$s^}jCdz2$IY`L95}9s`~?Z6rZO2SpW74j zQa-x`*OkxDU%<9to|9yKM0@!Cse-n5MBGs(IoqnbKyJajvTX&B@7q1{9w6kby=8ua zWaF99&73=UaLdK~FX(5Y0kB=Cd)cvsXVxd}SZ3-9G0>O={pDB9)Q$45c~pI`@|X+} z)mf=rcW*uKdmTOj-LZONshbVFKp~e$+6qH>zCY1KQrVzibU)|%3&Ey36W!#vF6WB0 z4`ux)x-e@}AA*T}Eb`j~87u{Bov+qHCIIf++4DU>+V16ueml4RzSc!c>+Svn>lde_ z4JR&FzbA?mmn5p_+yYsf^-^t*lp09S{=8tUeKRhktupHJ6MEtYlc@Owd|oI6-M&kt z5?c((knU!BH_ES4$r2`IH)_i&Q*$NN_2^WL>sm!NuOw;JTnC8Lo#g`$uwwXE^pO2E z@j@)mhx82FZ!@#^I;a5MMw?nWZ>6-{ffRg~>r*T2&%<()gXjiG5uMF)=wwzI^ssK_ z6QP2&RVZJghJL#~!uLj<3haavm0|8S8cp5+=P++GgZBU#4RE(-QsLO<-adZ8-d^zU z{OhS!Q%z)|_Q(Qhb9pP&*Ic03Sg7||(}by5(Kc<6{JEK>Haom%U(!8{tMmG;_kYj# z?VaR%fFvnH7?=yhWBIUtT9-zoZr$}!K#>jbl|xahXGAm&3TCF1J0nL0o3WAS!#%>( zpiT#jDSw04W)N5AKqEybd^=mcyXrvK16?*$zjvNrOIex+{qK+-j80V@n$EWcS}5#% z)YBBXXrY2&T(fqfGcyO7>fE-L$%Gg82Ql*b&)Il(=M%v(09OO(CZJP;PIbaB3p-ER zE$T(UOUZwc6wk)7hxTNq3%faqEzfO>UciMC7TogkP2bO|hs`rle#b{Qn>kPm$liXq z1h|?&HzwhZNH&?YQsz6FT7VkE0q=@SXl?};wEnQ*(L>eemFDHUCGA{)BEk_RoBB-% z(gkP|2);Q+x^f|1aX1=|8-S|?bQO2+O|o!`YPR&D!V~T4sp7y4&^;b$X~m3Fe?7KW zh@N9Ok)h7Jqe-R={J2^a4ydlxymG0W=O7~1DG%X*0?s|PfiBlSnAtn(%^>{FYNwT7 zy}dp3+KTl*aYny3ta?jl9bZh6I^8l5_h~A8jd~nQmu!uNWVI`lPyAwes+k740h0vC zR|n{77=ZKJ!+i;bICjZolB7XST))0CYqV|;FPUaf45GJ5=?}uf6d2joLlt$3%H-n( z`--W>shAyQ#G*<{l$-l@t=`weTQB?`AjQ9gVNLiU>nHk`3+-XM9s?%uuN3_rq;xTl z=TF&!L=hWLSG(NSkZrBUD+X*2%oUd^IC|Zs>TGC#1XSv=-g@bG_pPUT4-m{3Q=951 z{-L3YG+&PUu3{wVff?9HE>=1rrZ3C=d|SJkYc4fk6p-83jut|qWS#pLb`jI~zcv~W zuk)AtEg7wvUG1zxt@qLiF?}k?+z*S!1dFaNhPwaHsaZz4b~sU6^sL6zkI^O4AoH2 z6Z7KcluEV%?%TV#_W&J>TpeaEIP_@BMSlGSp${*?J;A z|FEXAxmxR^r&~4hCS76XO0kh}`#fZ`-t{))d%tc*K=(5SG>H<@sIOsTjWTZX!6#Wm z+*}q`Xz)RX#ri}r7%I-^5LihGgw%-oT1es=9=VsHk3{v^@u3#VCPgk)X~1=640JIP z$=Lf7B6+wbsz|M`I)BpT`ydquF}#yXTYW!fB@jeVTh3174z zAM|Zto;2KZSfB%tuL;nd6H%+*dDw>i3+^WXT`w)Y<_!)NT&$t!8a18SlI^WrFqP1F zge9Waj+edpFE7K`%?>rs`DcC4YqOr}%V$e9eF^ z6kHhpC6hxZr5U7b^)t>!%`R_Hwc9Dwj8A31U6+@^r0&OqW6P^}k(ZYPS5@=B{-0pw|oCsP2Jyly% zel*?R-u@h~JEAtJgR;#}TDvYS_`J82^Ym>O*q2xUU1{AGxkXd)+W`kWnRDcPrSmGR z$?wmj+>}y`;~{GoLE37JMg3kB$1{J+Kj#sPd9zzk=e9nXMMvX(mUD6Sc$>YvuQN-a z`_hvasv+R>{o~Y2_ihOhzIL;?tpY5^Y$dFH32S+Y{yq9kXr}c*^QTY8wr)T8FdP_- ztJbx;UL3Pk({v9c8vw2q(Dj@e0w2z4x_}5q?W9f=oWNX^D_(7>bBB$&zBr{?nQJLb z93@{*U3B5oO+b#o$6!e;mbJ#AmM_B4M}ucO{|a#5etr*-g_+?I2F+oGU5T=!1F}ba zn%2~QZ4Xh^U+3h8Nld-fpL1BtD}*$f!lqRm^u~Ts*NN9P$?GV&*&ik291}C&dfxXs zSOZ<}oK3^SL@`BEqp~ToOUULc#su;>>t#w@cqQe3g-1uar@PS`-CF{u-I$LzJMz`` zNO`7;DRt@Y+w@UcA?|N8$#?f{4|)%f?C|I91h$Jgtro$EKs`qG`rErt5A10( z;jPq*G7;V`c4$4Y`Uieyi_rLUpe9&~Hl#wvtAhg#32p!~s(yu+Mqq5cG! zre(nDt{Zt@+%xy^023102s|Hu1G?P5nVR8Lj8q(buqDJFE4hu;tNV;S0*U0RMvSIB z9F+6BQeiL&F@C6j^`BYzy56fuug+s@BoE$PPZ}rK;WrG(_dC!Hp=YZd5aL?f$1X2; z1XpR5gfxYWpicrh?Xsp2c+T9x5m1x#syxHHU1V!UOor!UitBu}Xfazx`$R$3@+_AM zaP5I^P%-$IU|n-%u2q&8t==P{6WQiQq9T`@tlg~BFnI0|AIDt5rh*e6G6f!nj%`Tv z1$!8@;2>;dLR!?c0>T*{fa?HsrBk|V5;gj$(%01|nbm!%J~wndxZe4@8AzyQ%+*tV z&Fi9LI}+Fz1|JK-|? z5ZJNALEJ%A$M79T9jOP*y|Zlif}xk4~z_D|fB_0h>@qp0;|`=cib zCC(av`!d5ZP3!f2O~~|F!~LSD@Q8WT*c_s>LW{u?Nv{K3cc2?2lG?c4Gqx|XChYPfDg`ds&oT>@*92_>#%?U?p2^=4&jEX!HKq~& zLdsetmF|qQ?i>A-+Y5)lyh*qhm3kJy^#Ho8{GqXH48+%^55o(a4#~}+DFS8v>~CAr zU;FUHq{=p;(#Iq6R};S6sf`*)`Jtp4{x(4fd>Lg~i{=#6V75O2xSl}QM{*nKb95W` z(}RFfJN}wK4XsjDoJ;sFH=kx+Gly>!hO@-K7s>+OS>-+|^J=&{BaZcmpYb$kF_eiF zG4&tD0j?L&{WH;3jB}Q&q@SdPV}1Uwo#A_Mz^nmS{9sisvQVMKR#2Cl<54ySI(>Is z3-RC9&r^F9)OrJY2;m&W-)8Pbfpa5opqn71g!gqsL5so0!e8mD`q4&t^7|XL&Na%q0GuB?+kUOC>sZ#FeR?^#9`+Yt50NvC7{?XYd zCR;204`;JECNmAZmoX$)@utHgS9;8%Rv9;^7eo_c1D>9*P@;b5CPyr1zxuJWq>pDF zmmS=Nm0^H=sxQ#3X}u>l!#wN88qH|?8H9Mh0N2#TXfv&AYv+T93kScl33*)JFHVax z2d=h!S6f;Vsg5nFzcpz%nf&r0P!B&7kgp%mMUl|8`jmw@Y%6&w-Rvaf4VB~FCqE?r z5Sl`IR%82Xw629bWR0a-yamn4?6@K0R0`VAT;ZeWL@~KM#B&n!+q3<>4*oz_SPCj` z&@+tqF-UD=U z@3Uv4t%34E`YvQ6)_?U{A|@>NLr>dyh(yk43KrSx;*{ROrfcB`dAZmcWHZAT$zYLn zZFdIQBRJ!4Pj^2DGYMJ; zO@$lda<(D&hLWs$H@mh8Fj|?*ZA|8A%x;l5pXRdoDS<7bMXKfJfXQ>90^Crbdy$TT zPtDtFdySd90U14ynq3VY`?GovgIho>Qen*;b^X5V3Y3V$qIL2b5fz%Wwzoyj-IFLb zwTN0VkU%5`tV0;kJ+qyU5=QAHM^$_=O6h?acP}c=aQ?uV6*>uVrMl7|C}R+=|E#q_ z`)oy5zn6|N9CA-4JCo7Eyor?qA$mFroYRH_-AvVM?CM}2eHZWWv8w3o`5!J6UP_*{ z@il(nm{rCb3yU7FS!4#o{!aFErZ65&2*kQo#y-u6U(JX&4Kg;Ny8(5G0J@)r2FnR~ z&TzR&tA?>XdUMZrSnG+EnO}G(QDEwYM|${kDjUeP zXt92JpkM>sNT4gdo$C>`;*`UeRK)x3g0==RR?Vd2NpynI=AI6s58ExxbtfB)pPVj(Xws z>M1A|W#-)Mh%t^}^L}#w_wmQ!ksm1jeLrjkf5Tehf0x4Nfn0L^1#sVfeh*OQ$w%Mr z$Zvv*vy{W(FBzp>A{0;oMEwbPWX0uC`KayG*|0JD8A{NfxzDM>mXrqjl}{xtJuSFS zm|%?cgai=)ZWPe<_j}?AFPQRo(xHp^$fJh?_l2K)CI-xP9c3QQ9>Ubex+O+@RoI^H zRrhY&I~8V^?0#pl`ZvRJ1W^;NO+v!kS@8Wnjt07gbHyu_VW}1fQ4-S)+Ls4YJ9y`5 z!m~OVEpcGyAsJwBguQ(7_Fqad3&*6eOHz>7b9HeXTfR^t%p*I~OnZ_7+_#zHdw_&5 z>JjE3)G!fxpuQ#T^`yY4Sbc|R6qXmsxJ*eR?{*r3HQ+0ji((v@)pVgpxd^lMp8cJQ z@6L7F0GT>a^ci@bj|IA=ZrRvG`U#m)H^#%H%&>n^)?Z;Cs5K&D>BvzE3Wed-37?_< zC^wfEZ6xIn@2KHk$3fVavb3or%N~`vNwZY|@{I$!6cXSXH)G>!+oaJwpV;xhTe=jn zgh)CrlBjnb&EW-|44X~AU>DzQ@;;xn4GiYax8trlSy-utq^j-IgrMjhrd_X1YG3NT^KLUv#!1Q_fw+ORe;P!t5HmeUi`Rbz+ zJ=OfE7&p}b_igs~9w4*iq5j=YM)&KZx>#6}budbNkJWbF9TeF{N2;%MPH(-_`+boNbmxe=m(VB|t}T|&$vP34cH~mV zVB@tuOhMfgsjWox8?Z}e+agAl`ex3US9R`^)gakOCF)>vSq2Ui?n*8BWCPr{8R&a} zFm*ZBrguy61L+5oUu(iwJFcE}%bX{_PW==T5w#(ahrd;Sj%aGFO%3UlXB3V;w`%n* zp7+@#O^|~ZploCZ?vrn4&-VcNDJ@*3`7eCcd3}a`6qn%04!D_wRj1p^&e@05g;UvC z6;NC7F!#+@(5lx#HYAE>8Nv|C zslg*p9C7`jVFtL-aNw0Y*+toMen%vTlwLzxCW0cLd#$u+zA($)!x(NfGsBv`t%3LY zrUTt2+RVcMk-XhiGiKFKOQd4sI>AJo3O(Dur~6W;S}tj0lWH@EL)V&k*HuMiwPP_* z4LGNTw-r}+3wNgk<}*nFZU)fRl53Vk5-a!T%R=bWy2=JCtIKGE_TRpDQ|l24MGjgH zceMz`_77ro7@~MJ7zs(grvIke*wVGkYmg{AjG6Ox271po6X+VE_@)rV`mV<5#n<2a z1bNd%4>--l2};(%KRgz0a@sE8NYPbrK1_+s=$o<0rqEaYwkTjPP`T!(#!G4L;l3dj(BuZoQ7zaIN7g4iGOWw zX5?=kGXL7Zi+s@5^H$kpD(j#atqVzFPut0(jDv*G!MqCY0p$Dkj_*A{t>NyU1XOP< zc;~zs0-EJ`?}VGrAS;B09wdq+Y}G~51j!foX~U*Z&G6rJc^i8jDzS8^LR9^q*ZB7j(_>9rpLM0 z*Uxe|V@)t@#?OEJ%SX?(3}YAS)mS>GVKk}xlW(aAG5#G6LBLH< znm#$h(4zNsRw(ZgWKiuR(p8J>9k0Xies*0_bb{CxPFU(u4O88UQr-l znZfeG7p0mgShp;Er-oJP;2Sf2p;}h1i}pw+3a>m$bA0-tO9Ryl!g75D=6h1&o_vPR zQ<8E7;JM|k*6#r#&^xQ`Ls7c)fDF8q<+6d|H8j&cn1!e~#5UsP=iER|@Xtyi-Ui2? z-|27r&iDuG6`XKFuy4DZz9;APyDLA;f7W|_OMq^}YY2;bdOpxdr( zN-A)9+rA@6ut}{;uOG8IC<+ap7DG6TfmUpG_6l}uKb}KBQ{X83Ppr4t%LIexQX3lY zV~>rYAGYmA3k|?61G=u64g@)@T&&c$(v@wCt9Md37L(ga1@c;D4#LA+y4#|D|y52)~nWCaNg#rXYH%bQ6+a((TWA?5F^4IncH85l*M1NODXK z+T>J}J4dd2k8+HJ1~%?cF?5ay1ynbCF~NcBoQdAHZBwmjMl=Q5E{%)7zDs%cRynEG zAa8n&Q53sNG_E59+)ALEs_Hn>q`KgfEJa8In=*VL*F|C^F`y>h4jQfuzMV!0jvJ{8%)Sv>ol4iUj#Ct?CS3AG^qTjIqtzqRbm&#a4l2szpWw2@3i)Q1BSlzS z&hpLtqu2TIa1nt5sKeV#@jXDXPkokNLPqNKI{Xpv*AqO>#H8+r+$H9PIJTp#2V-$~ zBM6i<16uPH0jan#?8|+!eo#M#H0ZG#oPv|c;L|$+ZtefLD;>T+rb-a^{Q%^rn=y+kJ4qs?VdEb-6?65(E^A3+ASNTx_+&Z9} z7*O<&!`dzExuY$hRj*BPoBGH_KI(qqWyn)snoM4D=DJ8pPFJ-m?ey#tl`n#|u2W>A zfmZlhSIQBh^?3YkR{y@v{s7&$*-)Qff5hU^gz*T!i3Te`{<3sY?Q_;bSH&=mM8pzi zvXD)mR*D?DCmO#E8JKS}pJL}rw43&(-W%^jZE^v=zo-YgNl?sqipif;1xuHvNMZ0A z4WpH2o4oVs{b&1Y{HSQY1e=h-KPHK^eZw;(M;%+BHqk52V7IBr@~BY?X-d(1>;2#J zZ2-EzGLO;2#hx$jZnJCjIM6zSuoG6hpG0=OV#Dq^4Lf238T-vLRupw>%kVunYQFmF@v(8vliJT-q;7@?xgBu;``;#@i;=@Pz6dR1(3Pj>y!J(J zZ{fb4#DRx%Qqi0rRQDZ*B>)!$Nb94F)=Y+3^ZYIVw-x9<)ZR9DfwrpxPD%Dwj+W(~ zP~+mea>Lw)?2t9n^))J*j``>kFBdHZ4=GU@7hBe{DjtNY7~X;ast^ z4kgx8o8>9|*;L`%O#OYGwFBKYDM-OutsGT6#>NNns$cmiv%dp)cZ;#LaiD2mmv#igQ?-j%-Bp$q8p7>ix(*Q-y7-V)Co$!2&v#%EO>-L3j5!Ll|s zu!;E6`rA1MPdeHj2f$9rxZ^>kq##>yyAtTRN%(L&^vTNs+_#z6dw?d2jf))B+WxS? z_ukZiy!F^>Tg&4`#S!xMgTaW!7AgI~>;RE+tq%l0(z+Yri+F}n(>-N7?x7X~qhRX2!8CGJ~UO&+MX?7W( z0p+_WM|PFRbLT_HA+#LRl&aJH_c`PLuR|};?LAQbO4h%YZ-DVfJxH@T&*na0b~Ld& zr#&V~a1h@l0H>g8}Q#MMTpHh2{$RIL%Dqko~SiJHt zBxT{OGYvxPKHH`6DJ7_-5zjJ43blX?hgs4)pXGAU6K=*8XTu|JHpm)NuM9UY#)8y;@ec~(rE4>V1H^P_g*SWqfaCPUVdiBTe*K&!us)tI3 zu@n^P4Dh|vD9~lhF|NakgZkArLTrw4_3e8x;*jdE*zGnG2ay^673(hf45qXpH(~tM zxt9fRk+6FC;DAF9sr-cf`Ks#Vsz%^_F$Q!M{F75h&j}zUt74tMtIqSopKqnJru}#* zHVvGqq5&Th{I0a0SQQ`KMC5jVFs&lxys^BTFaJ%$wpUTZp(IoSP=|4#Tc*X(HaH45 z>79+1dW4J8P2u5&}gMPEB+`_V3Qv6lfV@VSPStQHBp1uC<+pR^6zwq*5%P44- z{j?eYY5hJsecQ|5-6^1(gC!N^=#83q3p=x?gDIy|lzE)$2PXwR!6%MybZb9DGkv8J z=BcDi>s9gEP!UV34%Y7FY4UT#J(;6CqBsONpPUA|8+EQw*UrfW6Y@!I8YxNwb1!Bo zSs~$54PdVRgM?)cNqHQvVu)B02KJqv7GrIB=vyn+9^WjI%&u+oDZY}(0P>vyy5B1- zyXW?QYrqR$$myfXeyVUZyU4aB``L=FV9R4{+|1Wh@nCQY&c}sYn;g))?0H+|W&uMj zg|_=$WO=*<6*%{t1-dN#!je1UV%(7mn_}nOh{YD)r1V52P?kZjMNG3qGCXU`UC0*~ z`XT<}HlB~BQ>LCuPmptWzVh7HMEjz{=O947b3pemG{i+~1Cbg37>79$+oL4e8d4>8 zM%kgA-^efZA9jk5kl_XHqh8|*L;j8K$=>(pHyFi!2X!A-$A>7>lpqoS?mW;{A>WhP zSEw%w#Kx?QOp;1Eq|8Haysc+nnt#FhvWN`5ZG*Xe20?h^@m~*&__0|=8S49bc)Lg515{pNeIIM+Eea9DC-w!;l)8a?Hppa$R^v|^0tuqePJd39 z*BPBr(Pr#Xcs}UI)2)DFVXRig=9J#L-T?h8#YCc**SC7?@Z zKE&+&NU*KZ@`^P3c&Auq!u$w<4R^~K*z+gn-@n!a+G15m-NaID?qnVFN(+bHqH8Y*es%;FFLfr z=w`tICwe_NF4%%ZF_bl6fMb&~wQBOXaRzE-(Ch@v!S-w5;HYToSBDx}DVMh%{r$SF z0^KN&uS*{-jpocsSFDhEkG|YGl@XZ`bX+{b(b9izaCNQFAEElDV5nfAZYaM~md`Tx zFR37(3F+sP(b5u^lo=wxT?4vjXKC03y8WIHtLxe&9orKK z{1sxWC5hiyWMJbc$`6pgY-xRo8Nq2N(JaTMQH;1(OjEP^i15~LzzxMI2n=Ab^1WKCO@i#p*49dm zebv+zaqo+>m*g9*PUtDlNixWg#2d(u| z2D-g}x=0d54HZ?+>p?*TS;zJs=T4_OZlx5?93#6Dw723!L+T+;LezxYM|L9ReJL-- zXtvS#`1N+oH zpxe9Ec&shm9Ofj+I9PIlQ{s~+X~*mI*?Igmw?*r+NFB}UdLb!G`xEvo>`}QQ5zPy7 zx9lKq^k_vH6INm}3J)OPeV}Vcu&NR0(VjrC=>nx7a3ny32Ramu;ToD^qESK8y|F(yBjCpDfUd6-5U_0(0XXp7B;K98}qkbM-^XC zZgL>9YgXF|^`5Ph4LB?_|GO^7z#S>KSTmS^y!tvjv6XH9dFa1Cpb%}>FbOFY2IPAJ zbO#?uQIKS%%1fdJg)asg!dkkAy4|txtyY(0vQ<6K52M0_u}i@Cf5mGJmI$`-`*JA5 z9rs^aXIRE{AyAmoBLLh}pzA2glFW00LBg~mclIcI$Iq1xQT>kuiH~G~%@{Q&b=(q~ zt0zdYoY65gn9#wGfl(6IL4!B{GifhqzfN)2y%^x00bRepPFIVKN+M-!6iA zC3VQMw*Iy#;M{4W;I*Ea56Q3Q#N5~^;NF&9w`^Kqx$9S}6VNJ%xI)`IZ~@Q9=Ro)1 zYWabfJQ)7h{@Nn>bH*$r%%w_voe4~KX2U>vp){vj)^I*Ve^)UNPI}>QHoS;V=3P|# zgAw7Z1Et8u;UrB(iOX||L+ zgjjrJ8Giznb5Wkq!^dBbWGW#B>yyqm*&y$$x$e&t;2FhBw>{8E-ED_MZ_nWOeew$E zDi95M)h;Objl&d9NB(nT`J(>as-Jm@X@@<9KFGufOiwds3_GAuI9R-qFZ#;LtRC&Q zIzH%@IK3X`Xf~#^2;g1=-Msb@Bh%wrIJPRZ@0Y(LDRd+;r(rRX&Y~3hN_?3hH6#wf z4_=Sf%}O9}6N=iIkycO|a;mE6GT5(^1J}_rH(1qSm+l?T5O^pAX(V%!_{*g2b1drj267u-~swBCNtQ1fIL! zW`FMi66!F9=sh!Kjwj`Wozs+p17|)9!Z`Ya86G2pITKRYTEE+27U?BeLL%SvV7*I! z$swj&Pt4m3F|m?+iqXtq38=#z(9J58Y}Q2glc=x6Y3$+Q4cg^I>u-<0YVujtHK6BcVLeU;?tq{5GbW92rmZEeblj@P^Y&hO7 z6Tp1{y54xovof&1NCev%V}7pt-i6f%O-GjR%`3R4bdgH9=E7Keh2%4F`6yd0u|(A8 z^aq3nueg>>EHKdUEeBd!iU8cVTE7QK9D{UQRc<1Zv?fjd1tA7P(A!-fODx>d%n?Zk z!C$HT*PI{sa=4kmC7vWktEYrC|2nFkBA?ZQeP_n2rK|NT=q{Z!wRqOgxbmOone$>odJM>1RoomFP0k!4GxaXK$Y z-(~~v_5BBQT^LgAz7blnG&f;4!Qbntp<7v$7MvmdrpvAdTY2KhCp8s#?B0*I6TVC~ z=P49*-I^1U^VDVO33O@Gsar1s?vu|zw<}SQ(ItC`rnKilJX(JGaQISAvU)qpZRU(s3UBfX#nJC0NX*3X#d*7IV88wXbhBinHi?9xN(R>T zaMHgBc^t_z-<4n5e}vSUciDT{iyxRkKYc)_qw~o&$+6hyvob+LO-YEPL8>KicI|d_ z!voaeZ6@;`pe&`ax-y}=kH?v%0hVhy?;Ta}5 z`I9tQmsQ)(8iQW2E9PC6Iw332Z_l3h`hr2ct6*TD=uD2r&DF)1p(bbKK{Lkq*NGr( zowLKNjR@Y4OeTH@h@^JeLTz_{xWPl}LiED(H5ou9uERRp)5GAjmm9>uI)DRRinAlX zoOo!jjLDy)NIX6QrhfZN#esV6n;P>iaIKz_32xLGj7wE_x3Fsu!%g7S*X<v z=8=vrEvHeP>P*j|#LAC!>_knS+QhG4vjBB~1iEn27$&Vo6(~$gvsb0-uc_WVKTA{3 zd>&;7B>eWrNRjueZKB8PHA&hQ{p8(Ad_}lW507cq?n4&8ys~$wwV4835YQ#ay*BmY z?}KOWZ}T{nCH^wYFh9$-Z&~qr_3!q-k2lSDcA?|vc1vth%l0|_5uHe7qMVIyKlh+Y zftY~O#ua({jK=$Qg95t8LpIF49QFlJE^O=_+x^+J8h6AZrHj?>f4rI2o1-Yu!Xm|4 z8H&ZrI#Hn@PkaBCgv72RPO0ze1%W=w)6WC<9cZ8{;6Vb7%`}NBDue==AtI>xk>I4@ z&WU_Rv#_4<>%aA2i4Fe1Oh&dEG`$Hc*6zm1_JCI*RyZ*N+)C*{*y4}C`2!5l9fY3q zIUAFS7n=_!XVTt(s#-fh@<2@NBd)wUUZ!aGcb-_lOJL&mEeZcObPZaIE*pZ8^g8^T^(GR(wp4 zG&NI&R`1h`_zs-^A^_dX@)>kUI2}Kay8amq14*HF^ar^d=Y^z*e0nASb9FWX2)}fE7l0}<~H4_ch@EC6g=YB^ikILmdskf^@{{_GYz~{ z@C>vDP-75j&dostF!@=mHp|M$H~EX!c*z7%1DWVa_a>KxKe!clEIb<2?5Nc*pT;DG=urwu50R z#7y|gu{<|{Hyks5g6wfIgt_CulY@C;eExi%y|R3De(mxkAmgqN#OA_*pXcH)AoE`jJ zM6{06HZnJXp|@V|Jzq4SD=Docm{wDs*&&Q_8!>M_HirVC^SI$+NS?lU_VWj1GBZV` zZ7eS1aqm;(GFY?6`ZO1`Q_O!G#O|MtUpuK?t56g8OV9rp+goGEKA3*EUF?{5d+}#9KR6@;;n@s}-#P7X#?} z=VE$3b7v(>)kp>HW^k1%ZxHP`PVNgCzM7kiWiam03nKU`icjz?3Tu6(Wg~V~NSqO7 zU*vN5^x<|!98nKA*T4k2LE0^~Fng1BkF)9EYB(q(z9swB+3fJ#s$*&ROhxr!sgg30 zqg>b}1%BwPWRH1UQ5|Q3DuGyJm7=_$uZ3(ZfPArlE~s0MTSlp`SwXmq0rR`y@-wct z?zLlb{2kj03Wj%2qdJ?~&_8(bs?YFazia##@e}(xl;Tp)4hgOFI}kp1X#iYopzARk z`(kH4wPz`t0sTS|H5FY*6u8un!r6aZQBm7b#+TGU%B!ZFQe=i@R_E%Zo|(&W^6RQ4 zHo6m4>ENFO4+Fr(0lM=XAsZB5aN_Q>2v)^Hr^{%ji`kJ-WQI!?dtwDhJ*@8jAfaz( zx*-#yJ(wxM^KYB!Et8zGF7(%aaBa#y~OjBIk%pw{jq1M(#Vy5!MRJ4xxf zkgwSTzItj(+l9UCA7^<(M{2~hMc}-8L#M%q8Zw>0EA`q6{7GpI8w>^m4dVGBOIXF9 z3cIw--ex54_c0OB9nW&7pPjjiCaKyMEik((PmP+eWSQOEhdc1p#ZnhUnTo`H-k^mW z74P%dZLl5Nq&iox1FzLCKTnNh7)I)W0=UFLw>W^dEahqs1Vs%AS#(4!;Z(8O6w!uD zYxDh!#)m9B5{<2z|GKH{*F6o_3o4UhFrVF6r)*MA3ObfR-Z@J95r9hqbQ>@97JjtO zuVV>>v)#W?pWX1eSCF_938I~mO54ePsV|%wgV3hru39$vb7%Uu=2uhviE8Zp-17Fm zJa&;dKk)qpDbRHmYxKfwetM*-2`1Me3>e}}-x}E^C?$Z$Dg0-XlTt>W-E5_UBJyyOnnOQUc)fm<;F!U#VI$1Z~S#fxnM!HrA$8W0uM17Un`3^C5U7TcIr?0(7@fn$Bp2Wh%Gz@SdW<{Ai7q z>#aG5MmC>)SQBeoh@x;IEKkjWp*U)K6<)mUb#;1 z(Pr0%Z`K$tdD85lod2d7Gs_Zt^vVx>=#lenXTaM2VMc2@HQ)(JXjhkM*RZg7*)+fR zD&2i<+9WxK?zpp{-1~m?$(3KV#Ri;hm%VmG`imAG+6V47+`qc9XIy?1pKce&upmzQ?|w zca_7|_FE7nzTW2K^B$)rY2|PN#UIaF^nOdnf_I@xVRAzgk}U&VFTK4s_nX;3HJ_cq zv^OB|w;$8)xq$~l3X6_@Tgs1v+ir}oz1T{SP^vb{ziLA$=qT0(=!?V>M`xg zH+?%eb>j{9k-PfdOxH0@kFTqe*ivg|vm>u<^2)V=8cA=*E-SMgX1GuM*0RoK*HjZM zrv)5s)iad;pqd}@2&u0GT561$1-$GELXoz|2qp%c8ORcgbv1AP?p#Kui{x~7El z-O}nq+EBGEArJQUD+}uK;E{1KXT>Q#zwaM%X-)7&m06*`@u1&(*VV7e z^~+ax(ONo1>3LVvR~KBT+MTigFjKl^e~V(-DYxD0CAM?={M_-%$tEbH%=@Mh z)2@81kw(+l>P|~Ge7*c&zeQh8yC>Pn*)i4+*Z8;Vw+<{C{NTR+p!G5CZkhZ0Jqt1Hq#U)dV|~-p zSA)%Nr>r}^18)mSUGFzSrm@KL@P$5QxBJJ2elhx*J-K#5ySe~|T@$8V&Vec3F0Y%b z6epZmDl=f~>*vcCe2lx8E7AP<-Qk=y+FJ)FWZp}&kT|NpGsW?~w!z7@X2o&MO(kmQ zQ~CzHn6iBm!>%dQ?uu<)51Jj{;2q)?=~+B5ZBU7X<-s>0$&yDufAqX${m|!3eyV2A zS^kT5c1pJ$yK?KEe#bYeP8xr+#QDe-xAptQnBVJ}G3}lj_TY?#z42wcil1EuWR{)y zS@OEja=Wwj%8hH<*WJ_UGghK#v5(=kMEQ|vb;p%#yc6o>OP_C;J!11KIfK&|&NIiw zK&IW$+#h?_XZ9HJYUq|vz6MWqjnm@&GQYlz*cCQc;#ZibPo2(zS<80Zyjl4ENXgmZOT@eA)23-wH42yu-h2oT}8b z$0bLflm|Q8G1_eq({9P=4O)#-vgexO2Xxs|CAm7aQajM-K}O1>#tjSR{z^VFeX7}a z=h$Z^Q%-*^SUdc}pl7!?99=l?%1?=6$rl3+i<$eAgPC@3##~>JwX>2lE&ue*v}L=q zx(vvc(}-%j&UXBK?QpNedGoDR%|mXVj?J%-3W>jb@M@y;vG&sH5hL9FTe1t=$T7b! z9Ky8woRhHa@Zhc_3z^uX7%GM2$=ypz>v$g8LzE8O&Y2&S4r22j>`XSwZ z{ek^KN!KnIw`JJ1X4>sNz4@F}Os?tKVd;Q$T z;qLQ4j0(0Jw&-2I>uzm!FW#PN8ooz9zLT!vu{jL8Lz#95si^sEmB?PE){vNYTKBEi z!=^3^nm2}d*v>1j54oEB^j6Pb!LEDF7iN#>Xg=|Kn;$U)rq?T;d>r4WxnR1o|0pMh zT^pudRr`8x`=^~x=$anTe5|?T!$O^TpEf6SYZK+w-}shs!|1?*=9iOyjcUGHRFqI_hrqO>@LpnzR_nDv!4xP+MTwvQTOJH z>bKwKeRpy{v2|Oi!lhnTt&K^Gs-Jy*zG3zK3ooAbQIBucxM|#@R_|_;?QoxtiDM=^ zZl6`rHe*YK*+oVi?3i}Hy~-Zss&VtEN#~Jbw?1`LQR<>r8tomlqRzvr{h6;lZM9b} zzx^v{^<^c^r`s~0%t;OuU)=M7eEovKy4RQG$8p9p><(wz^d5R^c zWGdb`X`B7?li|WUuAWCLJHJorGJm9b+DN0XC7jH{!9u3tYiF&>3CghdYG`-OtgxcEv;L&&g1fIc?p@oxlA0wpYUR<~ z;BFe{G`If<@2I%E;@*z@yXNnPrERn_&@x2%ttWo9xXZj zW{UCqyBjOo^yz(fYT4SyE?Ps}pI`BBx#$_>;uI{WzGCRxZG~B_wFW;XG>qM{JA(b_MyC`9mB38({6T7^z8SyZ>e8e z=IiaSH@dj9OwcNgE?d6HOg0{9)gx=oD%}m=^Q}X}uJ%c}*RQO5R_qq@$^qNH#NK#u zP5jjh%b5(jqnLKTi%plcOW0#&?R08E7n=>6(t1hD9JACP{_RM_6yv3~l{>nBm>j!7 zrg*Qn=`hIM$1Ee#qNT%7GsZUY&CJq}tS_s{J^Lv9*Kh&HUE~4$ai>JKfE_-cnX? zQq5dz+s>-@j=di7u&s`(Hp5>hrrn=UgA-HCZ>qn!GPEYAs^(GO#eK^=ZtC@6{`)>9 z#mAm5=b@wgdhu+lLB)>Cs<*${ziix6ow>npJ4;!lnhep4!-&>Hh zE7SPb+^q&bHy)I~sq!oR#4(lp4O?Ye3?@uHcScD){9M5p_mwX_w(d~aY*B=s-Hc;RBLElN5=>I)f}4d z`n1Me9sPb-#wVX4UDpr){yHGXqr@doZ0FPmb8qf$X?`jjAU=IE!|r&dUBA-%Pp=2a zTUM7_K3D2rVQZZ&Zf|z&)5^7d4iz^$@9dhcIl{4_{P?hUSE>(wOg9|e^ZMIho0l;^ z%bGr!e_7oa&#*gzX}A8~ci$kZYlK|U2doxS*E?q(ddrFN9O+e zM5bLctu0;NEg5LL?0{a{n4dX|KlD=RH_RnV*JVsq-w&;MZEnsf8l>{_Y(~o*gUGvg zB969M)~7aK^_Nvs^Tce0m$n)Veka6bzVd z?foIBbLrv{UNQZeZmv)2+EGSj|I<&~PA@*&M^*0U+_J}`Pd<#h#IQS=X;<^TL_vF% zo)+ERFL+GLd%jb)Q}DiLdXLYwj7po(!``5(X#Cvz&yqtb8^0{M^~tnyT$OI+>#m(!zlk>gkaCmJ=!tA@@vAZO-x3!C2D?KP?!ji6qT1%%6 zdn#9Uv)xM!^%rYC8|Y`x{3zoZKSta?P*uLC7jr*qD%0+d?WZq2G7ng7vUU3UoXb^< zO5OTD^Jx?Py6S<`@`|gaed5D%wNo{wY+SviYC)EbS$$sN%AW?~4F*4nS-fzzs_a#U zzwS)CzxpgU36%`-ndvsDqs&i-*RA%Q2OK_NIA2{mE&J)}M_oz|43^pQYn|LIt*`r9 z(v`Q^bue0cw*AZX>R+F!osPO&!LU1xX?K&IxKVJs+_`gh^ly=o9$`_@ZdN!u1EIuDH>tr<4EKUg_0Zi9vlPSJ&TKqJO4AM?$05tC9qc z-FKrUhc=e2-pG8;n$ENvmeu=QNqVJPrL6O^MaS2PNq@L4o^P$6J!^K_+t&AUTqK=- zNLcS!Wfxki^5W2&D-ti4^^H)zq!%-F`i6>Tt4FgK{(3U)I*9cMQ`@L(fBezK!1t2M z8z#OsJmu_yf4Vbk^TXR0Eqb|Z`Tn(=!2*|c zgu~*OP8fXb|1jjBqMZJwJ!)b7&DA?Ky1s6|ZmYBQz`~cN6K=n(-u126s(-82G4({J z#!~&96ARL_C75yWW!hbzSfIRd>AXd4TDHHH+H$b1R8vW5yq(o-pPhZI9hRlppWplZ z=8t^lvLM1e$o%-8WS?)VYSe45WHO)U{g`%BIFAl=l;;Fhe^NPGlc;m& zc1~pcE{6 zz2-*B+mr=dJeT{_=~#5`;Dt#F*Tn9f{8qVp%k}FO@!NH8-Y>G+&wL&VVA_pL`Otpx z3HO|9bJKOydV3y{@iY#vOWU{N`cl7(?w@8q{2>$FyI@uS<)!{vmt$%oek_z(XZcb5 zyz4^GNg2*I^Rf8F|9Jns=0K)h_fwkpTh566a92=!zgGUN&*rn6zxmnCedw@9d86*N zq?KzUeGlFAaoj96R&#IdwNE*(%i1+rw3J6LS1@d=t&`7uZ!m~y_saW9*$J6Dp1cg( zWmji)cJ=X>J!}lW_IbZ6+&6!JyL%EP?z0Vk4VpC%wD2Zq^xN zZHYa`CJcXPGVOL(G0i$u-cIU>>%q$^bBvCZyDZhJayYq8t#!eR7yXxC)t~Tjb;0E~ zmxGoz-=DI$Pe^TXN%C0r9nZXc+b2&O62N?)Aed>_MrO+O*%H00d&xExP3rkPZ*h&2 zq}S!7{Gqy<l&4+qUYD?0D0;zhawP5nGos{0(8+ zO*&#f(V(W+VOK5prfxq!8y%Yd`2Mmr6^ZdnJ8slZOrKM}Kf0aQNEIm=$DlgNQI^e{ z8}hW?ZN6-6@w$89%ep?_7D^~Re+XmRJyvtt$@1K2 zWhWV*5s^W+=LDbjZLFH7sC4qQdl#*}>XA;vvUe>TI{m7x!K1=K*KIYe#h>YxmNqF} zT;w=oe!C$0EuFw_IMc3docYcA6o>L}x87&Iy?Zw>Ud+t_DLuX=fXl#^C`q%Ao&C1uQW?VR~_q02O?`gOG|sz`gBx2p9*wP}Hgqji>| zG{bHL({AbRbql7>?d6!Fa-r$|%D~X<9T}7QE#8;p5TrhRT*=RGE?ZUgE)OZ`8k_WLUwi9k&^FBbj!q5+6#eI%xOmOR;WCf_q5*fRY0%j(TQEM;99l#^R`Ak+|uc{UV=D8G40kL zEqko*WwZav>#3KA?ksqgHN+%OT`F|0^4Q?-*|~9Ejk|7TWF+=&JUv3`nbNw9jbrNT z=8l*!UR81I{SA-4*|{+6Ml@g{c3$}rtF)nkWl zT6R+PMT*g@3nm7&EvEbLt}$$Xp~C9OX*8 zITt;=(Z$L1_`A>%bKi`LpD1Zu^=iv~`{|50#4+u*t4(ZN5x>9jruOrK9V>gx?)Ikp zO9^#p1($}DM{XL6(|hb0HsWUMd5aq+Go$q#mly|qJHAmSWwJy@RhOt$#vPdNt;93! zE~+{C;jzy9&Y}CupIwlh{50D{LAT+c)q!oDdn8`%^mKK+N=@bdJ{RBSjC@iWrcp1} z!A2)2ahTP+kjg=p6S|CMevdwzX;(MjL)r18bV{P!i}`6Lv3-^w-BA=XZP$sx+sB7@ z-!osLTg9FVr8gU#`;|@1ZoOS#7yPK~&E77q^}fkboi7af#JtbXVcPBJF*Rz#xZ-Wb z8AGo;N%^wE>ehB0uX=z zZOBNivmRAqp{1_d>B#$O!4LDx?=R9Ql$jYUnX$32xnW$_Z+QXd9x?n)V%oJ@a)`6_ z=Gw!W_V?D#d9wSw`0c2i7YDl@3-@=)8awu&(q513iR!_1hE_dSJhaa?P>rgUoOyjx zfS6_V$K5f@Hy1y`er_rTD{^QAPN9(ysCA zTEE{omfSdfWr9=uu+7EU@dwVjkFD#lc%I1%xi$;x!&GnfSh@e%=(}fU)fdLijb7TG zxt?6ev^zVe=0U}&adUsUOLQ+A|4!qDgZH8XO37&rDxLh^Ki*%bsULXd&cs=Y-Ro_f z&lzr)4KmWZZ8m&l*9n}*ck&*e`vrghvwu`8$4vO@P z^ucj`8xE)4|6`oVUQA$=A9*R>_P<`ck$<6Hp<&ds4BK-!vZybm`9*q12L}6cqL3!) zYt(xG`~IjOM1%zgM~8Dbr<6Dxx&Ozp@V_sDq8f`L@V_qtG;ah2Mg>yM6Z&yD@}ha; ze_tmM)mRh(Q3OO05Jlj>RRp;A?#QrEQ+U1BiNnF;AMbfED3V)`5=L5(*G%qntsw2c zRYm_7ILm#0^NS1%j`8Ds8ZUZ||DV?6|G%EksoW^Ph)BN(4rhP|Z;tp^$Ck?Q@(GIw z#qrSe|Mz{kf3<)A4to@XNWYL6it~Bw&vpDC^c+Q7-*;zlILiOc>qKo78^qysKs|hd z1NG@P$xWNd;ixdu{vG{ARK|b(2vFbHmdLvox1TRuU;Qh;bNH_x1(AoM2#6veihw8r zq6mm0@b8X*B)>qxkv`J8#4j>9Ff@w8IeO@S*0Tn`x}t+90{^K9&{&w2!&{rr!BO=6 z<$o${|G0?a7Zj-%?-dfv$vDq@r|2J|=tLBO|H2WVzWYCQ&+Xq4c8Xu$Vh*Ph_P(re zRR1UT_bBh=+r0VKJ1~^Hm-g@QSyaaFBS7sDK`+AMPk(@5ca!&7^#7s={Qrmm^-00I zWnLAc?==6}HlX;0NBBiW1^PvFd&ZkMjvzK0Y2i6S71 zfG7f@2#6veihw8rq6mm0Ac}w}0-^|rA|Q%@C<3Agh$0}0fG7f@2#6veihw8rq6mm0 zAc}w}0-^|rA|Q%@C<3Agh$0}0fG7f@2#6veihw8rq6mm0Ac}w}0-^|rA|Q%@C<3Ag zh$0}0fG7f@2#6veihw8rq6mm0Ac}w}0-^|rA|Q%@C<3Agh$0}0fG7f@2#6veihw8r zq6mm0Ac}w}0-^|rA|Q%@C<3Agh$0}0fG7f@2#6veihw8rq6mm0Ac}w}0-^|rA|Q%@ zC<3Agh$0}0fG7f@2#6veihw8rq6mm0Ac}w}0-^|rA|Q%@C<3Agh$0}0fG7f@2#6ve zihw8rq6mm0@K+HqpG*HmbPgwH9`D$GNMwYMeqd;1lvi-DesGx2O#i@OKmG9$etuRO zMg|&@fwTR>{QGN|Xm|w&&Ik?jZ_l&-tCjahpMqhE{#)DaqS@kqn}I2}O_pz`PNuam|39YB8x{4_b7 zmvU1$911%uid%PwS2}8Gie&;-~dMnmW$u`qlijT7KWv zr9$!7en_;jkrlcqTW7^J6i>RE%#(Z6?9`vA{iwfC|DgUrF{JoV`%-&S`%#^#j?^9$ ze~LH7m*PqBqj*t#C>~UQsxSFV^|3}lLxB`%1EfJ)Kx3snkO3V)M<5GmyvPFupa_&e zC!h=@fH)8XyHE)lM|;3tun+79X<#i_4`@s^f%l*pd;m12J_8y@U%@x<9sB?-;3xP6 zS^))042S~>APJ;E8z2qZf_9)ikO3V)M<5I2fILtDb+A1-gSCKpk{}u7qPJpbS)i zDp&?m0L@(=o`V}DI0JIPS#S=}J%jEMU%@x<9gF}YfdeoHnkdg0M$bwpd35^55XgF7hDGg;08Dd8;8JQa0DC$+29yB4o-lR;1oCw z&VU?n7Mufge>x8?fQ#S~$OD(b6>t^ggKOYAC;&G=At(Yj!7We>Zi5nV2iygv;2yXS z%0M}I03L!z;4ydtDnKQu0#89Tcm|$>7oY~b1h2qrPz&CGIa z6{LerAP#M1e3sIFa=Bn z?qC}50Mmgd@B-ez2XKHgXu|1x&i{}}5aewIKR^qR z1~uS1xC+9+EN~At?t^(i7Ww4BdZb5yNDu`!gRLMP>;T8WPOuB?273Uli3gxR9)TSv zU;`{b4*b3Vu7V6;ifc>&t$lsL3@`|J{lEw?5a@!ZNUs94xK^<@i7Rt;^sY|8MKfMt&UvaJfJ51vLJ>fG41_PWI2?x~@2?fiB=I zKIZ^hPtyID?!$CX?hI%xDg)Ysc0d}m0jNF)ZgP;Fnwi6YEc?d+)#0vh>H3bK1OKRu zV<(^hlz=>-wXVRfBF;&pbXw=qXMsjXU*H0$eDYTv3WQX$7 zr5ZT)0NueLU;)g*Kwt(;0o_-Pfe|nS24Dct2YR4C=m+|OK0p`f0Bz74^a5I-Cm0LJ zUuWP1#(>da6mSG1!3f|0?7?tg2ZjM#U;~B%YhVQ|!4TjBynz?+1k-^Bmpr#DW;m z4V{VF?+lLdI8r~PHleou0J4#O0PF|*fCQj1yd7)nOtvGJP zaV;1O1_2B33+Y{OYzxGJ7-&Hnb?zTHG=uk`3A_U@!E8_l?t@Y=2doDxz*?{gB!i_O z2`mPSz($Y;R)GXS*USSeK_Zw7$Ofe+0n#Y_k7>)1mI4H2EX4T|ASh=6&gTP4Uk1nz zx|Z_Mk*=d7>6DfP=rfg<%0FL&<7z-R8OiST`wq;>O=YH`gK6yUlPtY0D(;^ zkJ88vT}w8|SBk}5a0hGyf>@T|{5B{C0w1U@x4=!11CjvwQ3MKsz;-Uq7Xh+QalZl5 zK>^qau7h3REI1A*UQ~bb{~E{#)K*u)6_5okgFJ8vTm%=ud2kNw2N_^9VAf$PJ`3Ws z1?S`w`LP{PyY2&&mI?NPJzzH=-*y1HhIA@l&=1IeI;XmlO{yb(rt?1@$v(xC{GjWp zzEt)BAZW`!_E+-vARt>5W3qc1oB}7o2|zwj+>U`va0pP{v%yht1RMrrBZ+^cbFxkL z1ofdb`g{ibQ5WTlE^sh$)&W{d^(qV}e`QN5_oGwUqS$UgNsx=v7c>QBsan4hWN z3dS>~Q=cWPuIEKqp(2kFFt&{2`Knz$d|Hx|Z5Y;4@uA zbw35DUr^aefMO?Te@ZI=f;@jbzYC3g5!6Xw;|4zu9q)m1Py?#K6Yu~$1dqWZPys6W zpP%9Q6jX!f;034$b>I!C1+M_j)~W3P`6q{?Ea(W@gAPCjC;@q( z2oyjk{*lr;169x;P+4S$?nQKeG6%F~?*sHeKhPIwgWf<3Xn-Do?tkjwKK$&8V|UOK zXaa!^K|abu*Z1OUlul^`U9Sszz>XkY;D0BiQMq&-`AgT559F`Fmw`B^X9)wK56G7R zz!aDOV_*pAxr54}>jd_h?ILIsvPX3v3dn96NCj)aYOo5d1S>!aSPqtfWUv@40t>+c zFdrm=c_0zY1qomdm<{4V9Eb%mAR5p!KqR1Nf>|IO(DOqm2m!%hCI|w7AOOq&{=g6T z0(!=wXPs%l9ZUsNz$7pcxPb{^JQxRD!Ei7P*a91135EcQC&ioMX2m}j#E06{8qoNm zYv_8xH55lW7v#6YIkh9jm9DjCoV(!M0SK-gi*sk-1V)3AU<4Qi9Kjes*N{D?9p<^9 zoWD9wMt<@|(3k#r?O)j=pFM#f4}JCl-oOixZL%wehKU{eHEn9 zu{WT+6k|bI6bCAg<`mLAfglg_T#zO>(mX=vOMt-UQk)BXr?Ti=0|>4YX!M!#u=z3g$Ui!N0w|q$2C6|7 zcnY3_mw=Fya!aTCLEi=C-4z`2HycU5A>fn zr*@!xs%RStK(U~9qBc>%Q4G*NoS?m0kxu!=85)P7lSX@n6dx%ZB>~wLTu*IIaiGt1 zPU|QIoOc8rfDC8@qzUM4acl?L1G1@zqb#62azGx?o~6J(l~3hS9hiQRPJNB)!c3=n z5o$mST2Ig&&_0wZF4aJ~HqgXp4bX#*_$+|5p@8xWj?OzWDl&=qf(uLb|y97o!-vj*gkB^Uyz4pc7fvyTAwzyZ)c zADxc`G_D-^M>?l{dD?rXYiKW!pftM11w2RHX&p`b(&NA+FcG-%&*?Y~xPz&{8~6Y} zFa!7kYLB@%CV<{J*8>uCn8~(?aQQF~3l#!$&HMyHpw}pjm#XKzZ4bAlpxI3Fz6(`Mpy?pyH*VKnl4D}5S zp&B7iXDE)R4p`*pEqDHhVla|#t*A|(3!@C?f8;7glw%we8RSVFFlD9oDN73|Mi5N( zjXj`rfTE_{TVcM|xLcIRLf=5&oV(X14<$KwPpN9`-Tnf_n7eC*C?qvb9nt2e?8O;m zP2W)8l=n=l2IaW_>Eq8VJawQL=o{&q@t*SW)R5GEgK2Vtp6?haCQuB~*CK-hLvb@a zJ3eX7QTcseq3~mH2EL&sliZ>j<0rQ&Uxi`{*9>_3JLm^V-_t&(PnCZ)oLi0wBFC8# z9Oms69LdqYn4@oNq+1FF)igBGH=wmJ#X6&RQvZI7{k+?XC7S9F)JHh!X%MZObR{w~ z=YjR;d&pz1Z$t&f1V;Hm! z6w$m%itThO*C|06sBcVOYohm|S0(LrSz+PasqX@zG5`vBpf^a#bd_e#TycsHH=@)# zRiM1KyVcdS)7Ak{c>Tb@D`I9;e7GNH_~lVE#=N?x1BF__$bjP$92rMmkE@#cVrpfQ z3|~R4eZAs?BB3}HoinLlzP^JvugfAO!q3ZxRwQd)KdkDqCVw53L;b*j`%Hp~Gm?sln)A%`I*Ij2{>Ac5W1zpjAJJVA+#~ZF?8ElJ+6BkP~ zBp)!<(_tpul zRqlV}**wW6NT{&qxeIH`$kT2_*GZq9Om1*J7)aKFBK;zL5QBPGN2~f8*LrS5$pOwQ zD}qQtFwUeZBaNxEOUe zGz9m(9`azeVtcnSYb;Ll6h!+sF`)NNXtcW_*37;mFD6hH;R+f*z4tur+fpQOdDQ>}iKD6tn-Lg?! zj6W1OHBc0xG){P-EWb(as!;j!_z~p!3-+eI}H8s;W zp-~bM791QMj`dLRlM!;eZBn6_=o_2pTVRIujt&g=<;ZJU4vUrkaE2ReBWly|u*fK% z$ViU6*X^Q)(QW5LG1tdk0jrX>yq25b+0goZjn`+cHS~F`MWE0;Y8;i@>8^^-H=Z?p zLt~DAq+g6*XjEj*ngyK~Hzrp}iX|HH`dbulLgI87*=f_NI*E&&$TxGE{euFd0;xXB z(#t1Gx^>9ok4E(0U_Us9zb!*bYl}KcG<6c|OCRwU>BUoAU)wHMNDYV+D)C++!E}Ym z_YM~(u0Q61a*PlicpVuP9~=#P*4w>|Wvv#Y9D%hczlcbhMBXo$(z;hm%m#UI!=Qm0 z89l=*0!5uI_PKva>c$aao^dFHc|YwWHWpFoj;Msc!kXJ$_h@a=lLVtV14UaDil|(4yLDv4npvJbnONB}*6!PGpec-eRYn^nV zvKI>7W$x~f@0PFo##yLbo=^$pr}JR)!NY9UahFNP_cwUD{q%Ajg3Py@BR`h?)*IE zM!Bskn0Zn-fjai&}+B7c@0_@XDrl+fT#n@`cJkD7~OeE1Wgl z&T%e!ufVsdP&A+n)H!T!^y3bCh(MVGMH5PI|3w}PpS;7!5-90>YiaYwlug)H6fmZ)P^efz zLAIoT-EOB-$LOB$ll+rz## z%T%c7p?EY=l5%NH|L-O7r}+1J3+$#q!B9=AYE7-2(YvHC_l|+}2A(aT(8?}wXO?V^ zqT+C&G7XA6lwtBAL#k^R_TXBh1tcc~3c7aE%GR3xFRi_dxOup%jVL@FdSi^+XH*`@ z>YV!(iV;>0$n#r;yXN~l%AY-;*#%R`UzEcV1Ng=g11Rh<=#DNWj~E2JJNeGlB&rW; ziggGrlK!|x;>Lixs`=w;gXTmd3v!!%Z5f7gaMMT%_?D0)X?@CpYmK}1pACiXSpz2r z`oG_yuP^xzYpGDMhnM6R@ThKCP1Sv&vL6bK?ZP(w7Rw}+U>+5Ca0LpD;CYg+T3=I> zF~13v3Me!y&%N7vFLqW*fKd6uSGFZ`Y^P;q1_>2K9p0!vGQj6*S#k(RsOUqX5v&)W zBQ<%Y)B~Y1imxOtyI50`^EF%+`e;L&j}T&{=DdzI~Fw>ZB@fFAXcha zL!uveg?o7i`*Ci3Gm%-RcQ2nCH+pRR(-XhA82^EvQwVF+uYVo%`qXx~=3suT(LTO@ z-qADAyH+jam^@P}y3Q@fn089o*4GA{!+N|i_iFF4Gjlahc0nF9-umq<6uLK7y$#ZS zGFr?F3d^2@P+5l3nR_)@L88Nx2Y-J0xDNYt5Ah0$K`!i=IIoi(TH$B|Yv%ggXIk2K zA;o{<%0{)xPBiKV!Z%op@(T%%hhlsDNLsI^A|)tzK&QAxhkHc@K(Slec+D|-!Z;}C zBBTU|`Fce{%6lGTxy{1qJ`_xf*sL-5%~K9q#~7o;KT^*xE-J!n+S~)ClM_4iL>}4- zz`fo=pSSL_=!|8)=Xfi+o_qw=fg@JmPUt>Ttrh%j(w@f8mh zmo)o?dGHN0A8+j<_8<3=gkH}>9-4a(yv*}WRX!*#R95ko$FlO$hiAP1BviKX6-9@U zYtwhgRtS|tP-sTVug;9fnBJ@o59mn(?Q$9KH5L#VvxEB1*J=@oZ8u!A8OKN16Y|(x_n-byRG>^%b4odVsKycsJp-a2*z%Q6^S{5GWb$LAu$)Oy zXy#k*cIeBPtfljWN*ENH`D#nO7S9~lBSEMvpE8!^ys~&r|!ETWt25`qJUE7Eu87V+P0^;@ zaT*jE7HW#oI4Hu~!&3ENEI$t{9R+l+-*9@=&b9;dzd+$W1R8L1q0sD~b@_R`_Ptf6 zP;dvPQ9l5+#Y1J1wMTQz_hA`_pwJB!Pod^e@EDkMa>IW0iqh$e`3iiqg`xmuM82hp zQ-sq*uEKo^9S4O*W6F(0nFqyHKX?jFmmW~4oZe$JGxM!0Xm+7JF8DPAiX0UEAy@rs zmye@8JMsWZ3=|su4M#0^bUHObmtPLNo)H#~Cue-0XYEp$6R>eJUqPOQd=I44Q*UW4 ze3ivjxGlGeZ>^u}*^IH;v(c+i4p-Rj#c|l36!bTC-+H3;sE-~$+Gg#2Lwnj`qF#j<{I;gtF~=SqmRSFFL|Mlv zdpYd&VetU1@Y~+Yon6?=Vei+T*sP$DRi>U-G45nO-502}v9@Hl7RApK@$2CC^5-jh zbMtU#@?~lQ(OwL};-|6w}^XPA5 z&GnikZitQ-GPohp_i+b`RLwlqEXwjlJdAXBYOn+15e4-fMTQ#lrgLtmVSqdjblrYMPR6 zj_s@cZ3|z)D7g)V?x$g!7uD|Sp7)HeU>vabM3y@SX1y9%qdQ>HzNK;xr5q}S9(;sC zYs))k4Ps6=l^umjyTLr=@xsfhD!1SB?#|p^#WJ$~dKQEF`xQ!el%og_WQT63>pExL zBzQpI?V`UKK%qQueQVx)PM$NG>l=4QvWC(biicD6xHm4k^lV163szh#{Qz-e8FMJd z4b~{ua+2GhPd8Fe;#-3f429NjMy;p2IY}))$5puB)Bd(sai8bddsPgq(S5F)`pnP(rKAld=C(v z%~0q*CqMd@+mHy|W&E0AECfdCMflC|i#ub#GyO(?Q(h0@u2gp;55-M&@r}(FC+&a1 z&x78Z3x#Uh>Hdmg7x&zJ%T>6mfP5&lemhV$>A>}r>?H!llv4_YV*RM|Mt#L3{~Er6 zR$#wxv)_N%=eG)!L+cQ;(X;#MXS~x#IkX9h7+~3;H`6aZa@6VROP>TyzsU7~+vC|+ zw{Kug0oLO5`qd}&RjcKDjWPEf3bn%1(3-6VT9v$AL+<*Z-4LEKXQ#8H*O6NR!kVf= zp}2+WzS~{>wTjo{xp_39&^X=K9Jh4RX3aC)JZJ?2ju{lXH--;QIG8tYuq@we%)3rd z)S#$pzt*f;vqg)qV3Y(vp)q%_F81LIHRq#z1zyjFLL;k_jj3()m69hyC6%wt-*r{- zvE<4jdtG!?rLqyL(p%^rE=o}PK`h5&H4|i-ALZP@#I^^E08SF~C z9yEgSR?EL|=7VqkVG(+G-6Me0^UdOvi+47l9PIzmSYVkCFi)|M?cSEW`i%3DE$^4^ z!D|KXv&?TtFn6bseazWe@!BUhuFmD5{ZH;QE$^v~eI}=$Ez$_)SbU7ha!8rOZv~9g z-+I7}wG8r5-%(x_r}^tqag`v}_#Pb!^|v~&BT|-8d&>9<#@rkz)IKuL2iJ{So6396 z;*RRr?cEvkk9+sN^WqsJk54$z?J39OP z#%}HJ^bq!$oTVI$M)v;p@5;m8-&ocm81*b;4)ytM+_*C=+kL^9!#+yh+VJi_oI7Ll ze>%Jn+<(meYK_FcT4&pLvG|MCAp0}mKfMmYyn`3JxU=#NyGtc!R$Do7M+tY#v9vZu z3Cl_dF<|dIr%?`#?KxkX^)64}LvOj!6Ea490TjABtJ}|yseLHkgFjB8ltH2Ug8nAW zK6N%d>8?qm9!dignq9s~7shy=Iz;O?q|=>=ePsRiUeBFJ10%g6BD~@`N>y_&-Se?f z;#KX0%4C#7E0oNl8S-z>Nlxc0Xayg>@@v}aiS?!S4}^JGS`Ou~^boWh zdmeU$EFK^R?B#qK&g)g{#STmKemjSnJn6T9ccR=>O!+ytLj}A*8#hCkdmBYSQ!|nmw{nYd?c23!!omqMn z<^%SYV~;g^9`^gs-)SHAIi7vB&h7!bHTI`n_NUN)x;~hd*;|`E*6cN9_nM{0|K@CN# zYluA*_873_!D`*giMLa-rqj`!&3ilZ_7CtLJl=x$n(0U1J9l*Vn5g(gdL`D%hWN4^ zTQXje@u5CYRB~Jo_dNJW8;UXaD}IhofLHKLC?zlE8;n+Qe+Y%Xdq?}wzk?hc7#Vfm zdyQnvv?uS$8WebK;mqs3J;a}TxHL9~bFFc|Z%lwfyHb-cHAwn$aWSli=*GMa0l@3%Aw!#piO^M4n1c zX|4yqrts~LzaHRv&Gq2VzkpqS|RUsJnrt#N-RVGo7kwlLeTq_2hZ zSt!)su;v>Jh4QxK4g7Y~&&8Lo@Y;vv8);>{-9)?Yg5S>x--KaTg6W4R7z?i5wc`{d z-1nm#daDKHT$sq~J54`gGt3u<(OV$&o)DB9d_}@ldfCA5^QJ(dSVQ^aTW<3BRT%~; z{=_HoMoE_&sqHEkXCLI3V~jE96&a-$9T7OR=bgkwJDlsd3b$V?AWtXM=TWluFRQ7^ z^z2O0K{>slC_$OpwcvD|=`YGdJrV80UQ_n>xY*yKVt>0S(AS$=uj>=L&ggF6mA?JQ zkE3WbvU~9FQrO-)8p!$0DB-vEAA7I7Sb#fkUx)oS0>2px7{AmCe;!$AHhp6}&;4d( zQJW%efA-)bJfN9X%7fPr+$#fvmlzwLLagx?B;|<=;k`SV|0}Gau+Ae{*hBvK+axG> zCwL&H@;{c-NvsR((>G6{{A0Yq*`@)Sp^nHyyZh*)UOr(FG)f+QS?zl+vxe>q=D5kA zri+k=RyF0a7NLsDqeenO1gMj)grW##gM5;W@w6j&uQL%VB>I(U0~FeIU(|YP`wvy+ zP~_qF>p#D52@kk$d>VN2=B%yCXX?}zpP$M14fjR|C|zJJ{{5+kPpr=;@)aXf&QX3I z&yhYdJ(o>*429p?*P(Ppo^J|%Gk=*B^WN6Noxy}t;Kkd2d-kjNh^|S;O8K$9^C$Cg^X^VNDs< zIQ|#&->#We!S$NExA6sv0u;wnt<_cT)f2eB8KEdnTfF@y52Ze6&XRV6%rbqZ`aBEvQrOMkKlTMHx%*v4S!zm?R{;}IGwIR zl0vU7p!7s}ug1=n7&BoreWS*Y&fjUdzY}Zri2gQi+?xLJm-p}*?=e$I*}Z1>jokxw zg*|Tmc$b{!x7vNn<;u(3(7Kn_%IF8|zlr=izWtr~?YF<*=B@(R#{zo{emn2*#wlyB zVjo%T^A39+cHbO=c%$*Uy3((0Z{$>k{dzK#?levh`t9CcnsHjF#6qF59k!`NE-`uZ zMsCaDJ$wVsLMYUxP5E=f(;wWTcUx)hrTZ!CXpF~yDh3ZmoaT+$a~hHcYe{^ z8Qdoc3r;K)x)+aqw`1>=8wqsB;C~;C-|Bk>d-?jc1Yi9*W@;RLUqa7wf7uiN7z25+ zXRuFo|L6Og$zQDO{?6L+@2nu%`vLo1CLaqIdT(Ry`Ef~uFE6FHwfJ))d*7)-9<1Aw z8naVfMoTJO6XsC~!?Q3HD~n{$QE$u{)|{b?f%3lal#iW${taQCbSPF(o}Zm_?vwW( zdJ5%x@E8hSf=HS zyfBZ{ES?AIDt)}Gs&DbuA>8@E3`$>E^Ea6)Z6Rj2SD42Wiar$0ns&9XOnewISOujw z6m#iSXV;qcoG;9C0*Wq_yoKQ@*Pd3>ii=;LC;W19r`n`lUbB17 z36;xGs6Hc$U0mEhD7XrhmryjIXvICZQMk0xN2o|easOTMq%SVhR1=@HeJ)fipco;~ zm$B2f)s0_xU8u~2LOpWHlYvFL3T1Wb+wwW+b z72n#?Ur{P<3V|JjidZzyH(&L{;C;s@4ihS-P-wk#`9=54BctZf8#nyuOoU<##do;c z)N7B`X9$($Q2Ibwc~ds$gj6M?kDh=+{rYef{;ML>@t?N%hqX#56wwxr-hpoo4)pxP zFGnnf*W+iW44Ld7+m^8&9RP*OasFn}xbsoZIANYiP{`|Nt$y2=T%1k62;p0s4TZ+( zkq?vCR#@$2^pG7;s1?fhy}od!c+G5Ko_qXq?p>e9iMy!$TBx)@q4qJq?%+D&z)dfq z(j%7FKG_*($8nA?+b>icpiqyO8g|oQen#CHbbF4YU;Im zv3Gg8s!%xth2r+0qqOp?&HKIzl_yXrIv3;pPo6k1?4eMRjN|p|i>deGr;pEMjI2IT zC_3FHoIaB~sxVfVXDk$&cd7^WTkd$qhq1y>h#FY%@<6j>;~I4 zr$*Ru{_P5%yRNzft8%cq()#?Z5!)gCrYzPFw|}O61m*ZeMn?q(M{?r&R(DOv%corrTJvF0|90I=4fp$4bDuu` zT%W82-cw=VT;3fp`GRG5Mc`(8l*8}Wzi&Bu692O`&s&HUl=?mTCbZTU z3axu(-!|yCQy41)#f-Ne{b!;hC?^Ki+QV8*OR!<<;js0vhW&GjP7)Lvb9=5_ZZ%(EVVc?dD4z?$8~BzWOl0zkZKAGRSkgz{slLi7kILQl5QKXf$?n zpYQsd6GLxvQ!5}(ArzWj9IOhji5DKX;VRtc`aAP@5w+-aYpl8Z++D&vKcLVIyF9bN zKF!x#uul$ae||Pg1&4pMX#x88K=bW_rFjWp{FF`{p_ z$-f`+u{Uo!M%T~y(s=}Q$P#+;pq1;leyDb(rt=O`$a*?@?w8M4chP&aTT-@=?avfm z-F-K?;kRG99I!t=arAcSJ zHD7wGO6MTivLh=Xy`)gcTzV~Z!@>U)wr(W) ze;KBm-q=l@rpw@eUyG%;opi3#VaB&_|8H|J-Xli(%22vQ(=D!UT5tN8mENw?R|wO& z9yiNjHq9Hy4IAc~<6WoeGDu(3OK;cDepA@6k8gS5jvu|^nr*bDnocLZh14zv}8`GZ^DH{t8J@>{HLBPBg*FMZXw8<>aS zz@G{Z#^?OE^i$DRTp>J-Q?|b6AGdmB(UYu^xE5N?c?&4y=2NAYp8m$VQ^;#5<#sV( zXhr|wA8fzJHx9j#;)Ldj!{Dz*3UPh;t}lGGy=)hXnIq3O{FaS&ZKO~y`nxR6pRsVW z4aplJW4|aGh$5}`zw7EJ7XAAW$y&zqrJNy&T6pbB;cb2Asr@$i%%KmT&e)jiKO%*A z+jZeDK5)xM|4nfL#I+SBPUro^HJ|0S;%d=Co;+xutKK;GrFohToyO?l4EcN3ANRr8 zpL~6mPFX2o?wq>EpN>6X?E^?bYooBeexwj@KR^75U%vSJ^Dfjdw<2X4Qr&bg8<+i~!B9`r*2VP%y;;{!D zuT#=_8*b(rbXeux-+JcZolY2{$ZW|$ddgeZinAs*I_QhTja}Z{Yl8`kX3pjHl1bNz zRhZH!S0VQ>^vT;Y}&KE+FeifsIxx zK7V56_UCTAnRp{?pp&?whNvIhw^ht}2ylMGu!yZ1zfd zvu)NL93Vx;)K3QtN#~NU-1h0K|F#)F3}4I#STyXhjWUBOf?Bd`jt+nV)OVM~al&e8B7oI)`nu@1xWI>*o8AB3sCj zNFj;V-roH$2d-NF5r)B9mu*)}2{5$cxy9rgZ(DP2?IOkoN;ta~DbyQh4DEMAbJ~7) zAZ6Cf-6^g!ep<7>=ixR9bMt-wuy(Kh>vm*p9F<)3{f1W#dY;+gp&d`z_cwHw8U3`UAWy{Q>mnKX9IRa)JSd3-FU|XmmP4_ znKA`^?rFeG2Da7z`lp2(erg%T)zG>b+Gsj&oper=bkbplZWPj)_)jlAd&)*H&t*ES z6H{sqCB5t>(LxS8_<@6RlW+McV5o&a*58*YpFLso@8nmqc9FH+@GA8}uH`?q!{Uuj z9XahQfRXJDDdlRp)$^xgK7ZEVg8O$x3OWMS_GLEI00#hB>L`a+yC*c))o}4H4jnnXo=Wk)N1*~o<}cz@$u_#oqi3| znL{z#F9I92`06en%U^S0{&O2lAO=tgJuBAHjKhR*i(~bix4!$i-_u$(wJH>q4tS>HqkbN&fA@*yiz#M7#_oUZpGD8=+v3HG zKDB;hss(~UExeAD4}rIdzdn51Juf}$uMEQ}<-lJ}M#a^;9scYgQ(u2d!(ii$M+e*P z^r4e}a`Y$9q;^0fAf%I`#lTy_z8sDMNjasLIY_q#6UQHx=)e3>T2CK*CI7_>JhD0= z8(eYLlip9$N7`=2tn~3GdBmWqOY+r-&XBIJ=iDwd>Fw`cN7jbi!Ixs$q2`tX+vaEopZor!!@qrMYtr%5c2IMpbFN(AP*FQxHmGt2)_Wird|G4Tk=9+tB`e|_CJv_9Vr_;_mvYaI%6(kWK_zeJB8g_``91W zKk@X(ch@PMGH~0yar=7mgkIp^3Y1go2m1P4ndAIlESqrCqsN`5Ip~J#tALFnbiH~f$Sr-wlF%3Aj3u2;C$^~&ijv;bLc}KxQ1p%WbYv5CZv!S+qHM!cm8tJwBIufYq69T0vOt}dVCK~UHavI zkIg#hZ1QbDyO9pL@*bgkAKLW5$B$h1yIn972LmuVu{Aj^QBu8>@-ARV@0_;LE|(nm z-J7mrY`lAIzn_S)evj$HR0YU8ifl@$K8`0k`q=$q<>7&wr|-Ats%2jmDf3|x?~Rn50sDy=A6_{9gcZ;0l=#j^kwWdN0vNIe zuRMS9ohSF4Z~{`$-Z8OGxTRzSdAC8{3y7n`NPC4c2&u%bb zSF~yRH%F!{`N_sRAF}aJ*Xfjfk+LP|ZF~NHwZf$rAd*?ZByzyLF);;xmxamkqYRVC zHP2YmJ55$H5*8K^2MtjJmkqi|f_E8)RnqSOGZ86|U;OmO4_><6 z4|FZOEwK%*@7uO#%cF6Iv8ta=u2o8*Ua2=h>s!yyIPKt@HY6_&jZEM=aSY};U@O=3 zO3?9d-n&ovBbN@`3mDSz7*FRvEO^`W$*;E_oAo@6KQt~t_om#!gwbVBz>psO=nj8) z`109@k@lCnr}sw+Y5%QWdw1sk=eEi2rTc#%oG&0{GE#28Z2c#{e!+h%Mv5FUQs@BY zM!=A7FX%%csG(#fOQ!Upps}5Scm$ z5B|z4vJW{=)h5dQMrzsUda}~7O?ph!>4PtSbm5`z+kXmkz%_Rr zQdrjSTsvjYd6)Mi1@wgs%G^TkJ8^B}=8az(;`3^_|D^O&$Zglhg;#37Qn2NbN9EoG zHmO}Y=i4VzFG0;EYCb+MI=wF>w0PnghGIU~^hsU5^XnI?x1YJ;W4vm`bZ&W4)X&;; zw)wlgZ@lCONFhB6t{J8dnCnhH|G{JN?|J)J%-R6MJ84E_${&6;>4@(f+c#DFZi5!?ey*}6>A;3& z>CDS%A~;qb2gJpyydpr+=<}{p4vAuiSxCxX-Oe%2dEyw8`SN zdn{i0CFX#!J&F{v0{Z(W?)Ai3n|@1TgWP_B6w--D?zZBxdlv6aYZ6kT>Dba?ihik0 z!an7&o%Xrw)ycH~l*VARx47S*>2M4A$a8{&bx(Z$fRoPMj&_K_;G;2XB`^_h+ibDp zlrQaY$b;hccq$NX%N z_WqD%&GX=Ptx;+BmurJtjvThdk8i*_E&3e$0@l=v)C_vO1uwtx*}ebaPKLogy*WKo zHWXgNHB%=ZcHnut-^z4m!{IyYE^zQ+aIozot$$o~&c9tHQ!t)AgOqKMa!hgAQ&;u8 zy{m@#15(J#cKWn4e)`B>cWqoH;*=m*j=5s4&Ex+lL|9Uo3FkXGVCFD0N7uPv}HBFUi$Ls<~ES;4kgB zPg(KCTFiC+dhpwv!hIXHU1*_=p7-k0FKm6@-4{-t@CoR(X{gJ?pbvPI z*=mo!mQOphq*LPkltwe5DGHTfHMRIdUO4LIqnF&4gW!G1cct9`hmWF<^7^n-9KT6wZAeQKH)50QaZU$6g94u4c=mOz=5={ z1HV}x%2j%9TR61v*eUy5BBVp@E%&OJGyUeT56?RIiEq-{6nLhTI1JOlci3++I!KY_ z*=pDKQHGu)@o(bd_9Bo9Da{TkakB9Kc;!O9PxugfR|S17 zD83ekl3s2?UbEf?<6hApYSrr%Gg%~v0k)5fouD`0uE{6z4ai5vV?KMudR4x+(XfMD z$?u~v&ua|ldUGgZ3*jMt&2Q#f^(LpR3VH<{T-$_pEtvJpPu@ViJ{Tk=H2o5`w+}Fb zg=V?Y(odeqFKDx&Kr9T`n}hlKY7eLF`RaKXfid-A$fjJON3?}rf=U*a5F83=WFKg? z8o{S}A=G~OUz#H`YmMrvU}nA9-@B#_dDn`)o_g{y0Kyt-^&`di=rA+78JSy;7eFL_ z5h!{KmGaD0C|4@pHnawi(vQcQkuciw%eo*K`RGw!o=<&Ao7W!U{iy&K78t>2r_;k z=BqhNNsU~xtkoO}I?r9ukPzUAUPh=yWdszWcBO72vC#r3l_v(k-KABojdegGD7;M#F$5i!3&!oR3cGJ@@}rtB4USrwp7iwJXq`tab^x=br-OYttK*A;j_MwDwC`xoNCJ#;x*bO|_ zpjxGPqx{H9-BDIjFtVVsbP0~y#xsYFQ@6wL8DO0E{A%7W7X6~7+SF_U)YT)@m%Ei} zo&c#|P{kP1TunSI8DPU_j6eizZ{Q`&u!vRsc<|r}L0O8|s0S@FCO}6#c{ns)bOR#H zt64!%Z#N4*-R*=)fCX73A5cc#(Y$Cdx3jNl%90BP089VLzFEuF>gD3hf|VDM30TAf zx+pqnh(gZ$EoG58fIvP`%}L3?Sk1S~m11wMyxMCt3Jd1xFSTM5%z3$HHR)SI&eg^@ z_>f@T5pd^6Gan2}KOZm^Bcu9i=B$)!?bQ)(!Y>A-_*Tx%of9%GK2_@VT7O5zYPk_C znCDkwnWK^r2%6=fFw}t{n7jL|)iG$3>zd!{ES~&m=BqdST4zS})yx^RYxTf0zd+D) z=fp%UzD499J^|3uR>G2mnbB;*XQSa{$3Z-VNa&?2EZmSnH2gM7JfYlxC43$w4x>JR z#dzxyk1CbI)J?f`V**S1Wt1G5?NsCGh9A*e(9D1)d>$n?0*?Duh=t#}!XtZbh)KS8 zg^M*qh>732!lM*Vh)R9v3Y%1JAu{>i6)xFdMHO_>Uj?9Q*~VK}+yGBlDm;%8hcS)- zi}BVa9#txZiQh+wOOA}9gXov;uqcMi;dYdm;EmvMUNB_5b%{r@q%d_OBLf!oX1tA- zCuP+T7WHi4VDAsv?c(kL%b+GQ0F8Kn1&ebn*$9*FH=h=Z{XUsb<}#}#mShwPMnx1% z47fsY)nKR)OOCX@Sen`2`fF`VYPB6yV#x+ixD`8JjwOeqO&?e(wsk zZU-8z{?-*rQ9WV9(|BVEV?Z8j`Ee4lC(FV0GqH)JlxGpT~wg(v?NCNa)G#72*Ve8dauQ*VU-`?yKb*Wv?0Z5`@=m*IMPO z-{)89b1$v&sb`hc8p)5y+`Pmpvr^;mS_4>kD%!mHt)NoQgCqXMng;^OTwOPT01%k; zSOvHiF)%rdFfMRZJ-Kcx*DY;rL^2`;0eJZY^4Kw*u^4jMlzy_oCDo7OT`@pQIJ>(T z=vvYu5g(5YXdnP16D-P z6R_cnL>{$+cil3nlW|sDa3LbIgh)=w6B@ zmy$vwe7*oXRutnKVM_iQJ6>RFW@X*RNa`_4k67mTpaR-zbxB+RrVTb~> z%c6~j-vUGQgSQaIq>TIH_~TX+v9uVlc=~H8j9mVRWT%pu;9OI#*|OqC+N$QOX3oM0 z$8O0uW{Q56(Omiqt@}{q4n|Mjlrthia1|krgAwuW9M45DN+Pn0V##ET7d=^ch~P40 z%(!(auqy@OZ(iPST1=m zwE_j(^b2K#kB6@alth%6dZjh0Touvx6gZF5M(9{wm=O{&q=JBP&#w)s{Ql}j8KL9l zdQE*n9-M$M5XFgO=laWjpcWvc$hi!$Z{imB*vF>dsG#2{5{Pu}_hBgEoW?*GERQ() ze#Cv^R7DEoR+;n7dahW&=`A>Gu?RlYcWkEU$HGny+XO~hAZB+BvTY+yf$iGrYo9{G=v{VS4(Ze5OiKrmwDeb~

HWO_}BVip=Ya?Xb&e6mNbjz`g*0G%6DE5Vl1>xAkLD4pGA_joP z1CNL<=TU@nfJWY#stbeBBLr#HKQi&$UvJQ^7y3bdvbOAH424TTO3;9m4X21c4$aHr zx72^EhXYsa3-j)3ihvR7UBHWHK+4u*p>MJYVDnX%#R8wwFo7y1g|WJ7va?-_g2fv9 zC^#gQ8#2Y?D%BK+qgzTBQ5B@hfTH6YbKz<&9r~9r#dWgoC$gXz<8x|=2)lOR4djM= zp~R`l%OPY0svzKfY8d7%Wl949LupBw>P+=llRe-}`V4#&if`{am}C}*txXagXI8$b8&4IWaI)m7!f92*q33hi4%ES*svx0XRD5F{AMxn zN>xoIz+=b~p6R?ZRUlam`YLRG@T7~2&tybl)2nE4GqKMGdy8q0t)zvs+i>JIe`vIW z0bz;oEB7D|#coltdC2Rqib1lP_|dNw6Tf4A(&R0-vOXmH2Fqscc6=5!VSX0Ppk1Ra zx?xT55!R+0EWM#4FWO+oH*Uw+G2iHct!ihctoa&p=`4mc7uDlu?#$|OBf4zl$D)_BVVZFV=I6M>}j zBXH5qT$BN0LIv~snHZi}w^QDF$eBew^WIkP0nh1_bMH*%#F;-kOS?wqmITZza&oT8(MPW7 z26}M9q!y@>6PPPk*8^xcX%?8mSBB3p8VU&t_kuuSe&J)3Txvzn^MOFWWGX?j=Ya4e zx)gwux~;vAV?GNYi+uqWw}ZLU7a|Z*`!^=XJj%E@(zOy*yNTafZm#wigA5gC;&;aA zY6}LWQkwBknecG)Np@F3fR+^wI_{+xzIhFmY z+#m(L(2s}AGLn%G=%#ZvErkyAkOb-Aeag>7x$*Joo;cX8K?jXmXCASfKo|Q0>ES=_ zB>7xL#B4G(F+7mHZsAjB0%rY!igquaM#&Lp5&D@L8(qRH7iH8V!?_xNDAS01>EzM{ z4wV=aUxGl%T5~BKzDkrtHjt|f@}S4{O4SMP#z@5vf_9@(Z{jpVK1Rn<1<{Pa8U5hl z2xO<8Cu5Uh1OTlbIds9LjSYSQYP|9@DMUmN+|*qygXbw!81@p-ttGA&VTphN9vPQn#>IFzQJsz*gT|uEKly4Y*dNt8 zoi8ZE%Tx%B+$S%v&?briXQVDfFx3es@DZZ)%Yj=KaYPwpBq3w`Mge_dp-XP|8b+)1 zn>g2$4&nj@YC)r+7(oMCk$0|4*BBZV15ikTpbo*43p$i00K;ci46YU(RtO-&XKu|x zMbgm;&WLuIBg!@A&`ccs@U|3D-F!R0ZA{`DWnmOw5EkJ>Cwu z(-TQ3PQ{%bWX>i>x&V( zn5!5#J;bm<-{Zhxq?GB-k0uU)71L=8k%ZhJn(#G~3Q6Jz=#oBX>Hu6^+%^jw>X9dP zuJIuzCIzkq$9A1-x@}aGEQG8yC~vpDVH7$h0*ZifDMegX>r*Hf|1!5O2-TnBQK>+Z zmXxV4Dd1RetbsO`k_l_MNSh_`7rDtC&ZdXZoMjxaL0*5%L|K)G&UZzafPqMU85Ndz zY_NeYo-``F(Ew!wYcwGf&ZsehB|r{^22N=x$q(q^a<784LO4X7?GT#+!D39C))!<@ zFia&m>9PPtIZ85*!ZTuH7Lf&M#Nq)%k#|-%u4X1JAOWZ`(9CMC%W)YVJW6s^N3BAn z((1JE9Tf%wI!K8V7IDP6c*i&*k0(W9nO4huZxz=1MeJF!wMg@80d1ikl9O~`C##c= zS2fEBW*zn`72|AD+6;i*i(pb8b1H2e3zg2yC}8JDloE&Cay7|NA{xaq;f>;>D>+=X zZBPKP@rJfS3jlVN6v_dx;WO$RrZSH!Bz(SK#KJwN1D=0rl&8I%cCvkml@c#JuDc*S zW@ap-kz=6&m1lmY$ag-gmJ%$irow=91P2>DIQlh4Ud<&in473#ex-~I#Gt~`haM}` zV1~n)4N)5G0h{rr9Y7g*Gvo|R#v2QUeP$5>z#+?S!Hnq1fy?=+(CQh*CCk;`a)N4| zhFto|B%UNa!$dpP56(`O6GU-?0J%18v6eluPv;4cvU2daAiEo8?;daft9@H1krq0i%`3|qRgY))&hjA zRinx3jc3SBiMr)iVKm?d4Z#XPd9I;e5t>o1VOGN0Ldpba823KFZdd3fbuWg4sP4LN(*q+fE%l84$&zUz;=EFF0wN0 zJ=l~su+UO*00S^=JECr6C5xG#7pX;=giCgC{~GR3@UX`R$D)*Qb(p)sT7bcfCDmXt zGnEMU8hzyRsPL*5OLCKqHygZI5~LcJPaa+R;r8#U%90(2=*mZf?#y257F=(#rtAm% zOQfPwfl@pe2;BnKS_JU=#lV53mR5ZbUCM$i%mXChb0+__EJCQefFOJ}n6S{67(|Ps zijhxUKr212Rbhy(GieO?BcbAp!F=o1nR8d89iDTn)au-hdfQcvrLdV@w0 zOk{^)4IpSgXjPhRge}91WvQSr4;Tuc+2QRPkw*|uFZTP$CpN!aP$qvMX}+RK;+9BW zfZ)++?yOm}W-nN@sF16b>0*xxZp!c}n6OFvpX=C~iTOskU6pGGi1)>AKe6lAi{LHh zEdode0Bgw!7_DUN$I>M;z%T|c3v!IKShVBwU(_R{{e@W7y(c4o^SMfnBcP>FDu3*i1JnF$6?r3hf`0%Ffe(}T6z zP{yp}K@yaJxReAN`*6ZUp@k`HtsitrH9;E^6Dk;z;sG#Oq|b?53@!2kWXNHULXHe~ z^05%SXqUMPZ3PEgn34$;U&EvGw(=Ei7114B4f5LFh- z)xtJ`JgO==SGxu$874HC#L8U>QIg@1Ow--^a47N^HX|Fa9&1}d)sX`LNQUzs4URbI8_E$l%@z-YK9lJVGxkP2qb-hIo_EdUVf&r)ooZv$H4tdnHXm5MX1{m50N9-yzbQ-wi zK;EEwN$xL9t1dO@(!>GIBUiStx>$m)+?g`z;ht8|7kIV0zART*KOt9C9W6Nx54dX8 z6~c{rWdyN@Xzp;et_tSZ66Yo-8qJ1XuyA4si{3I1h-QR=8~uP;*gW?%%*hV$I`d#H zfvzj0H5SgR<~QnO1SKC-;1GO#O!BX06n8B@_Tcy#~yjJSP zTre;bj@CK`MXLuPniE7~uS2gNWetT1M+W&OjVu|YWq~$0x8wrvw6tdT#wlJi6w9ERAva5ol_xEmh_+@awb3F$ z$9N+x?5^zirPb~jXeNQqqNw2!q-dbE3k-0whb8nYfh;|pwz;?qqe(>ZQ4qQ-)FrA7 zBTdRjix!TN+M^bkC773+!JYVih(`aiGo3#tIM-pXfblt7%rIMCc?Df zD0cT5+3&I-1COJ~ZSd{pqN8Ib&5#pilrWPX8|CN>K8a>D$5^S+nXlTfkW4R{XY3TE zvm=d|OdcDZP`lZBZAYfD(o9>6NGfW&N6FwK+UKMJEo?=ZVQiGt};MZX*6aO(&M+nPpN!MdSl7pSIb z&o?T{9lB7pQ|TZDQCF5R(hJua6G?@sW24gHK~5spk!ieWnm%qjVKe6#sq>K;9`~d~ znnwD#P{Kf^Rt7Bej9g=*iX+*g3l~X5J2H)xX6pJ%GWFE#W8@=T2}&dzrjC({WpOi+ zt|kB2I8mNFET|AOj#}We5mR}_hoV|~v{6)f#)l%-Lv6&6JVrXHE47JaQ*)1v zi;889If)Nj{xNbQSHlyj%CxajFxTXhsF>+vqoiy+cKRieiewlgEe=*lB*H0U!=4y7 zkwh#p_*4Sbn61m6(IbPh!aq;bHn0vkD^ zElH4K>TJfnjR#eSC^^Pd=NTKtNEl#J5hEGKix#3+)M!ELsU20QiJCdbMqQlSV+K+t zQSQuTP>uU7XeVbUKxRJ!$5baE0AJD*k(MKsC-TaMqRq@m1WHqnd^SkB@pe?GkdjWel(DgFtOiE=j(4guq(?FOAtTgP$2KKu0e79MH%jK~;L+j>C;Xt0qX7dUf=RfJ3f zXZS3(csuk4awE`MfZ>5*T)}s0GZlnL_m~1W_660FeQ%Y#E7iavzhuHf6{+uE1(N6o z9S`HyPx3}r;E+$*S{GCit^*Rc*aFsk#g0xo_rV_8BD`#TwJgAmH`K)v^mVympU^Oi4F`L@#>1yiEsflk#}IA=uCTkwVLx50FZt%^_E7vHbVQj0HYq! zD&0pmln}YL8UYZ1Q;**6N|-S5NN@;oD~(`>GVQ{}W*ktlH1kM4V2!+IQWhpvATVDu zbu@Aa(uuf$RgVawbcf4{N&=L4KsDjCKXC|>rMzuA50cpAb0O&f7-!WY%4P%*w54DK z-9UC;=t!aJDC);6!GVF2<6dO<*@2OK#EJ>WB4d^c&5;HshvJwQH`b)=K%Vqj)369C zEEW}A6_FwU-O7t3 zMbk?tVM_zk)T8{*$1oEffhOqMPc;dJAeqGZfpj`D2C6>!h3p1sm(~b22#~-$QT~op zVcRw&7|abQlc@v05y5MDurmf&)w6^%Em4@XIR(3tIG~p{Q_O% zKBFv@7C^&ihICzQ!iU|KN%6`j8uLVDSmYb4d_c#(WYUmka{>zU73K}?EU{amnc6H6 zXUYeTspNKw7*plgE1%fjW;KQnFjXnlA~&50Z0Q%YMfY|uqq7pQ?z)+34A;eClMey% z1D{yulCPmD0BF2n{BqC7aeG?P<1=676KKlQ%WzNvpC_SA6@N93^Rdl-*d!6Tz=`q3 z@^|$tgB+lZH!g<@y5R{3A}k+uNi21Z%ygr$0HY^(F{GJ4QZK;Nh4tLFnPx^VATi#! z!d+~~)jm+fKf!pA6@n`!T4Hpt6i8E0to$p zioEihd$aS*MAK~4l{=~f(TXc3jp#3&R5_c~X_`LrFJ zda8J!jXTnjBo2UG6|A;WX3NJk02o!rR|wQS84M``NBFFD$4ZikFc5i1r`|g3=8(-5 z%^JUwH4BW;!F~V-SQ|$iTM@}Tj72`9SZ=plk`={BXuo^ZxZ>9Bsxres0~+HEvoo4O zqd>ucpU?3DL3}W>rC70?Kp6YNmJ73_64;>4fKu&OiokJ)aFvi%F8U$3QID+7xFhiy zVSMT8Og^blzgu|X{6HrzYo(^>8jcXizM4lc`qe_P(9m}yz{BFcFGko2Y;uS9B!I)D z&ur1Tv0*u}zKBusW}M~>tJ8p=*XA~^=fBo?>UeY0dqa36Q>wGb6O;nh>KQnVEb$l&o|3J`PeoO}k%~OOt>kQc5f=+pOO#;1F{MN`o_YiBW&H^@|7sYHz)! za6!R*HIR=ECsR@EX2W8(4}vtB3-?o(N~@~dI{_R%V^DQpVIRs3kl`~A5pBfExf zJjE&qg{GSCbblYtA;j^)wCT(uBb|xaQxH62xK1?Un=naNiwAHfZySLF0B12`8e(f$ zIujKyguqlr`lx7?j!s)}Vv1%2w&(};q6qsV@DN~vGX^aJfwxTL0iN)g=U2{(_Hnxb z9f-t!>p2)Q-DbGq>;jl&BU{1!s}^yZ*?`G>Wgc0m?4k0wDYkOKpaoqlCosmoFjAMlCsIoE99cv>u?gpz z^-y0to?z$~1T)MCntnUL!Ujn|JQ0`}M=hm|-#)PrW3S7;OwiYnVF)Zl-m@ve1gxY= z#i$9C`lV}p%G%)HY*@lE92|ttkgR*rR9cq=CoE37k`@2E`gqiuz&d!L1trB38sM^| z!eoRatQ+(L_4*(w*(Btg22~+FY~n&#HZj<0<|p=s^HZu9O`ed(i?5dE*f#{bAG1Pf zOL6JJnE8rvLn^&!kSrfALbtm>S|l?#7jY_SCH0(IBNqowMI?>;Zc*T*!daM)U;x*V zchnA|TwJvyI)OOvPF$=5Jbe0{c%v8zIjTpqs$(-_U)8lW!YGl5!q|CBS)zDC2+d9S ziC7wK!IT$Sqf=i*0bO^!M!8dEH?XPmb?6vKSL8*8X2cBy=w&-hY-%FjIgX)+?HJY!pBa|$eJ0KxwpBg#K@SLVKQ-?;2oZv#_$Qw4@;s6+ z#769-%^(W~a?OT^bI^e)e5Rg(6%ow$iawu^j&%Hwg?_wS_+$hjBG`q}EgHb#fj9vK z<07!D=Hq~96rjZ(x?Bk|2Pna{|FU0bo47xAoAEiq`+gS^iI+dS!@T-74` z5p>Ybi<@b2to9%{sSd(CLWnDEy($-KG%pmK@StQVu2~rHV7@|va!JPqpTk}m((*V1 z8V_t{v7>_C;pRf@uLU~FHn2oLfCIWX%RXTAcke1%*<&Vfy=a#H?wsRXA2#Z0l{%HvSS z1@kakTSQ*=eShKnd4QHrV9)Jz3NaH^MFo&D)XGAyFi;<^kq1OP0LC3h(r8!dQds)o zS*ptisI?TJ^b605SuoTtt7wjhm%<;M=8rw9LbIV;pp9DikL1(n1sqC43fJCM6Nm#( z!dD%4P(@%sA!OCUT{I)mMn6D$?&j2_yYHF>ZU^i`5I0?~ZlM)hNK-d!psisLP%8o? zp3bj4NplOyZ&0KRXtHp^w@mt&9W~J*V!XRbm{@1GTi)2d3o?>c#IXKvsu6M2fBN` zg(K&Y3!MQYEI&FUQw#uA5CM)_SRhO~OG6e}>7-Nn1gJUE5@26ssa&eJ(7!M&lU-^R z?;Vu6@>SX(LKhKwLuG&1QZ_Ri7&KoYc=tf52?AQbu!vpbTVDtJB%-h^pzl`L+;C`C z2+;7Em9*1Sg)0+yX%&#_kt0|jyskxr8~ zZhFHuW~vbNi29H-a7#;+;20g?Tr1YAfDfNN_D{Riq=_MfW=LmAgMd6(R9f)_`N$c! zn`0X70m*|t#uvC?nb9`ZDGFteJ!2LmW;S3kUmbAAJdh4ntnoiTqd4EEw$G2EpkH^Tr?RnqZYUvQD2xm?g5_E#P7@s@6r+X za}?>`Klb2Y%@8&%Up>~r1b4xXuc41grwo;wtv0r0aI7zL9P~8jw^XLUmbToXA({V9f&C5D+|hPIqMQgF^6T-k`F(b!nbg{rcP4~{6)jZ{jS`A z*}X@*m2sQ(%z||SjcFuj0}k~FM6x3kX%bSXlpSutRzRj2{*vt|H@VP;_ZHTAXxEX2 zdovqwn6HFPjv^|Ys4>{@;W!+dR*z=|()cF`);&6PR24T)!X`S57%r%PxT_s^ZIR2C ze&7#u(?;Lq%_{s$`poS_Z`Xta8f4TXRJSy7u!EXhj4&ufw~?n>TB;=l0@zbhFmSrJ zvcP9Dh}+hs`-C4+I_aN;afW7_!v-#zAz>d!mG38Y&6lDX!C>?Q@Vn(5B@G~P2F!+0kCtN1Rj7cX zKh&z%IbKkhJ5n{M?^1y?za8o%%;bs#*0iHkF`RN}ZJa25&Ny_yu!P0Ok+$j)kh_c7 z4dT1%xP(Yr1~!!&%LzHhz5uD)Co5qL=qynE^*SPI03;r`tBNbKd*r|RVgB-FdGFx0 zsqg16f04fv7q=J8TRLOWjG(**w*~HoCny~38!Jtud{4f3)r04}ck$b2UU2pL1Ma-w z-JLfV;77~fiHnb#v*4KaqNOwDEC^A|)+l%h%D~ezK`cWt4?Uao^qizHQwnTsk??=& G@BagTeN(#t diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 092408a..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,28 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import tseslint from 'typescript-eslint' - -export default tseslint.config( - { ignores: ['dist'] }, - { - extends: [js.configs.recommended, ...tseslint.configs.recommended], - files: ['**/*.{ts,tsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -) diff --git a/package.json b/package.json index 7fb02e4..4e9f48b 100644 --- a/package.json +++ b/package.json @@ -1,52 +1,12 @@ { "name": "markone", "private": true, - "version": "0.0.0", - "type": "module", "scripts": { - "dev": "vite", - "dev:server": "bun run src/server-main.ts", - "build": "tsc -b && vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "@tailwindcss/vite": "^4.1.5", - "@tanstack/react-router": "^1.119.0", - "arktype": "^2.1.20", - "clsx": "^2.1.1", - "dayjs": "^1.11.13", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "tailwindcss": "^4.1.5", - "uid-safe": "^2.1.5", - "ulid": "^3.0.0", - "zustand": "^5.0.4" + "dev": "bun --filter '*' dev" }, + "workspaces": ["packages/*"], "devDependencies": { - "@eslint/js": "^9.18.0", - "@tanstack/react-router-devtools": "^1.119.1", - "@tanstack/router-plugin": "^1.119.0", - "@types/bun": "^1.2.12", - "@types/node": "^22.15.3", - "@types/react": "^19.0.8", - "@types/react-dom": "^19.0.3", - "@types/uid-safe": "^2.1.5", - "@vite-pwa/assets-generator": "^0.2.6", - "@vitejs/plugin-react": "^4.2.1", - "eslint": "^9.18.0", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.18", - "globals": "^15.14.0", - "typescript": "~5.7.2", - "typescript-eslint": "^8.20.0", - "vite": "^6.0.11", - "vite-plugin-pwa": "^0.21.1", - "workbox-core": "^7.3.0", - "workbox-window": "^7.3.0" + "@biomejs/biome": "1.9.4" }, - "resolutions": { - "sharp": "0.32.6", - "sharp-ico": "0.1.5" - } + "trustedDependencies": ["@biomejs/biome"] } diff --git a/packages/core/.gitignore b/packages/core/.gitignore new file mode 100644 index 0000000..a14702c --- /dev/null +++ b/packages/core/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 0000000..2e13a55 --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,15 @@ +# @markone/core + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..e08240e --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,15 @@ +{ + "name": "@markone/core", + "module": "src/index.ts", + "type": "module", + "exports": { + "./bookmark": "./src/bookmark.ts", + "./user": "./src/user.ts" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/packages/core/src/bookmark.ts b/packages/core/src/bookmark.ts new file mode 100644 index 0000000..8230f80 --- /dev/null +++ b/packages/core/src/bookmark.ts @@ -0,0 +1,18 @@ +type BookmarkKind = "link" | "placeholder" + +interface LinkBookmark { + kind: "link" + id: string + title: string + url: string +} + +interface PlaceholderBookmark { + id: string + kind: "placeholder" +} + +type Bookmark = LinkBookmark | PlaceholderBookmark +type BookmarkId = Bookmark["id"] + +export type { Bookmark, BookmarkId, BookmarkKind, LinkBookmark } diff --git a/packages/core/src/user.ts b/packages/core/src/user.ts new file mode 100644 index 0000000..7909947 --- /dev/null +++ b/packages/core/src/user.ts @@ -0,0 +1,13 @@ +interface User { + id: string + username: string +} + +const DEMO_USER = { + id: "01JTEP7T7A5YTM8YXEKHYQ46KK", + username: "demo-user", + unhashedPassword: "secure-hunter2", +} as const + +export type { User } +export { DEMO_USER } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..ff933aa --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "NodeNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "NodeNext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": false, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + + // Some stricter flags (disabled by default) + "noPropertyAccessFromIndexSignature": false, + + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/packages/server/.gitignore b/packages/server/.gitignore new file mode 100644 index 0000000..a14702c --- /dev/null +++ b/packages/server/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/server/README.md b/packages/server/README.md new file mode 100644 index 0000000..6c9e6d0 --- /dev/null +++ b/packages/server/README.md @@ -0,0 +1,15 @@ +# server + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/server/data.sqlite b/packages/server/data.sqlite new file mode 100644 index 0000000..e69de29 diff --git a/packages/server/package.json b/packages/server/package.json new file mode 100644 index 0000000..c421f9c --- /dev/null +++ b/packages/server/package.json @@ -0,0 +1,21 @@ +{ + "name": "server", + "module": "index.ts", + "type": "module", + "scripts": { + "dev": "bun --watch ./src/server.ts" + }, + "private": true, + "devDependencies": { + "@types/bun": "^1.2.12", + "@types/uid-safe": "^2.1.5" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "arktype": "^2.1.20", + "uid-safe": "^2.1.5", + "ulid": "^3.0.0" + } +} diff --git a/packages/server/src/auth/auth.ts b/packages/server/src/auth/auth.ts new file mode 100644 index 0000000..35e5419 --- /dev/null +++ b/packages/server/src/auth/auth.ts @@ -0,0 +1,148 @@ +import { type User, DEMO_USER } from "@markone/core/user" +import { type } from "arktype" +import dayjs from "dayjs" +import { ulid } from "ulid" +import { db } from "~/database.ts" +import { HttpError } from "~/error.ts" +import { httpHandler } from "~/http-handler.ts" +import { createUser, findUserById, findUserByUsername } from "~/user/user.ts" +import { createSessionForUser, extendSession, forgetAllSessions, saveSession, verifySession } from "./session.ts" + +const SignUpRequest = type({ + username: "string", + password: "string", +}) + +const LoginRequest = type({ + username: "string", + password: "string", +}) + +const createAuthTokenQuery = db.query( + "INSERT INTO auth_tokens(id, token, user_id, expires_at_unix_ms) VALUES ($id, $token, $userId, $expiresAt)", +) + +const deleteAuthTokenQuery = db.query("DELETE FROM auth_tokens WHERE id = $id") + +const deleteAllAuthTokensQuery = db.query("DELETE FROM auth_tokens WHERE user_id = $userId") + +function authenticated( + handler: (request: Bun.BunRequest, user: User) => Promise, +) { + return httpHandler((request) => { + const session = verifySession(request.cookies) + if (!session) { + throw new HttpError(401) + } + + const user = findUserById(session.userId) + if (!user) { + throw new HttpError(401) + } + + const authTokenCookie = request.cookies.get("auth-token") + if (authTokenCookie) { + // biome-ignore lint/style/noNonNullAssertion: the cookie has already been verified by verifySession previously, therefore the cookie must be in the correct format : + const tokenId = authTokenCookie.split(":")[0]! + deleteAuthTokenQuery.run({ id: tokenId }) + rememberLoginForUser(user, request.cookies) + } + + if (user.id !== DEMO_USER.id) { + const extendedSession = extendSession(session) + saveSession(extendedSession, request.cookies) + } + + return handler(request, user) + }) +} + +function rememberLoginForUser(user: User, cookies: Bun.CookieMap) { + const tokenId = ulid() + + const authToken = Buffer.alloc(32) + crypto.getRandomValues(authToken) + + const hasher = new Bun.CryptoHasher("sha256") + hasher.update(authToken) + const hashedToken = hasher.digest("base64url") + + const expiryDate = dayjs().add(1, "month") + + createAuthTokenQuery.run({ + id: tokenId, + token: hashedToken, + userId: user.id, + expiresAt: expiryDate.valueOf(), + }) + + cookies.set("auth-token", `${tokenId}:${authToken.toBase64({ alphabet: "base64url" })}`, { + maxAge: 30 * 24 * 60 * 60 * 1000, + httpOnly: true, + }) +} + +async function signUp(request: Bun.BunRequest<"/api/sign-up">) { + const body = await request.json().catch(() => { + throw new HttpError(500) + }) + + const signUpRequest = SignUpRequest(body) + if (signUpRequest instanceof type.errors) { + throw new HttpError(400, signUpRequest.summary) + } + + const { username, password } = signUpRequest + const hashedPassword = await Bun.password.hash(password, "argon2id") + const user = createUser(username, hashedPassword) + + await createSessionForUser(user, request.cookies) + rememberLoginForUser(user, request.cookies) + + return Response.json(user, { status: 200 }) +} + +async function login(request: Bun.BunRequest<"/api/login">) { + const body = await request.json().catch(() => { + throw new HttpError(500) + }) + + const loginRequest = LoginRequest(body) + if (loginRequest instanceof type.errors) { + throw new HttpError(400, loginRequest.summary) + } + + const foundUser = findUserByUsername(loginRequest.username, { + password: true, + }) + if (!foundUser) { + throw new HttpError(400) + } + + const ok = await Bun.password.verify(loginRequest.password, foundUser.password, "argon2id").catch(() => { + throw new HttpError(401) + }) + if (!ok) { + throw new HttpError(401) + } + + const user: User = { + id: foundUser.id, + username: foundUser.username, + } + + if (user.id === DEMO_USER.id) { + await createSessionForUser(user, request.cookies) + rememberLoginForUser(user, request.cookies) + } + + return Response.json(user, { status: 200 }) +} + +async function logout(request: Bun.BunRequest<"/api/logout">, user: User): Promise { + forgetAllSessions(user) + deleteAllAuthTokensQuery.run({ userId: user.id }) + return new Response(undefined, { status: 200 }) +} + +export { authenticated, signUp, login, logout } diff --git a/packages/server/src/auth/session.ts b/packages/server/src/auth/session.ts new file mode 100644 index 0000000..adf20f4 --- /dev/null +++ b/packages/server/src/auth/session.ts @@ -0,0 +1,135 @@ +import dayjs from "dayjs" +import uid from "uid-safe" +import { db } from "~/database.ts" +import { type User, DEMO_USER } from "~/user/user.ts" + +interface Session { + id: string + signedId: string + userId: string + durationMs: number + expiresAt: number +} + +const SESSION_ID_BYTE_LENGTH = 24 +const SESSION_ID_COOKIE_NAME = "session-id" +const SESSION_DURATION_MS = 30 * 60 * 1000 + +const findSessionQuery = db.query("SELECT user_id, expires_at_unix FROM sessions WHERE session_id = $sessionId") + +const deleteSessionQuery = db.query("DELETE FROM sessions WHERE session_id = $sessionId") +const forgetAllSessionsQuery = db.query("DELETE FROM sessions WHERE user_id = $userId") +const deleteExpiredSessionsQuery = db.query("DELETE FROM sessions WHERE expires_at_unix_ms < $time") + +const saveSessionQuery = db.query( + "INSERT INTO sessions(session_id, user_id, expires_at_unix_ms) VALUES ($sessionId, $userId, $expiresAt)", +) + +const extendSessionQuery = db.query( + "UPDATE sessions SET expires_at_unix_ms = $newExpiryDate WHERE session_id = $session_id", +) + +function startBackgroundSessionCleanup() { + setInterval(() => { + deleteExpiredSessionsQuery.run({ time: dayjs().valueOf() }) + }, 5000) +} + +async function newSessionId(): Promise { + return await uid(SESSION_ID_BYTE_LENGTH) +} + +function signSessionId(sessionId: string): string { + const hasher = new Bun.CryptoHasher("sha256", Bun.env.SESSION_SECRET) + hasher.update(sessionId) + return `${sessionId}.${hasher.digest("base64url")}` +} + +async function createSessionForUser(user: User, cookies: Bun.CookieMap) { + const sessionId = await newSessionId() + const signedSessionId = signSessionId(sessionId) + + const expiryDate = dayjs().add(30, "minutes").valueOf() + + saveSessionQuery.run({ + sessionId, + userId: user.id, + expiresAt: expiryDate, + }) + + cookies.set(SESSION_ID_COOKIE_NAME, signedSessionId, { + maxAge: user.id === DEMO_USER.id ? undefined : SESSION_DURATION_MS, + httpOnly: true, + }) +} + +async function saveSession(session: Session, cookies: Bun.CookieMap) { + cookies.set(SESSION_ID_COOKIE_NAME, session.signedId, { + maxAge: SESSION_DURATION_MS, + httpOnly: true, + }) +} + +function verifySession(cookie: Bun.CookieMap): Session | null { + const signedSessionId = cookie.get(SESSION_ID_COOKIE_NAME) + if (!signedSessionId) { + return null + } + + const value = signedSessionId.slice(0, signedSessionId.lastIndexOf(".")) + const expected = signSessionId(value) + + const a = Buffer.from(signedSessionId) + const b = Buffer.from(expected) + + const isEqual = a.length === b.length && crypto.timingSafeEqual(a, b) + if (!isEqual) { + return null + } + + const row = findSessionQuery.get({ sessionId: value }) + if (!row) { + return null + } + const foundSession = row as { user_id: string; expires_at_unix_ms: number } + + const now = dayjs().valueOf() + if (now > foundSession.expires_at_unix_ms) { + deleteSessionQuery.run({ sessionId: value }) + return null + } + + return { + id: value, + signedId: signedSessionId, + userId: foundSession.user_id, + expiresAt: foundSession.expires_at_unix_ms, + durationMs: SESSION_DURATION_MS, + } +} + +function extendSession(session: Session): Session { + const newExpiryDate = dayjs().add(30, "minutes").valueOf() + extendSessionQuery.run({ + sessionId: session.id, + newExpiryDate, + }) + return { + ...session, + expiresAt: newExpiryDate, + } +} + +function forgetAllSessions(user: User) { + forgetAllSessionsQuery.run({ userId: user.id }) +} + +export { + startBackgroundSessionCleanup, + newSessionId, + createSessionForUser, + verifySession, + saveSession, + extendSession, + forgetAllSessions, +} diff --git a/packages/server/src/bookmark/handlers.ts b/packages/server/src/bookmark/handlers.ts new file mode 100644 index 0000000..9d0217f --- /dev/null +++ b/packages/server/src/bookmark/handlers.ts @@ -0,0 +1,32 @@ +import { type } from "arktype" +import { db } from "~/database.ts" +import { HttpError } from "~/error.ts" +import type { User } from "~/user/user.ts" + +const BOOKMARK_PAGINATION_LIMIT = 100 + +const ListUserBookmarksParams = type({ + limit: ["number", "=", BOOKMARK_PAGINATION_LIMIT], + skip: ["number", "=", 5], +}) + +const listBookmarksQuery = db.query( + "SELECT id, kind, title, url FROM bookmarks WHERE user_id = $userId LIMIT $limit OFFSET $skip", +) + +async function listUserBookmarks(request: Bun.BunRequest<"/api/bookmarks">, user: User) { + const queryParams = ListUserBookmarksParams(request.params) + if (queryParams instanceof type.errors) { + throw new HttpError(400, queryParams.summary) + } + + const results = listBookmarksQuery.all({ + userId: user.id, + limit: queryParams.limit, + skip: queryParams.skip, + }) + + return Response.json(results, { status: 200 }) +} + +export { listUserBookmarks } diff --git a/packages/server/src/database.ts b/packages/server/src/database.ts new file mode 100644 index 0000000..9e19c4b --- /dev/null +++ b/packages/server/src/database.ts @@ -0,0 +1,76 @@ +import { Database } from "bun:sqlite" + +const SCHEMA_VERSION = 0 + +const db = new Database("data.sqlite") + +const createMetadataTableQuery = db.query(` + CREATE TABLE IF NOT EXISTS metadata( + key TEXT NOT NULL PRIMARY KEY, + value, + UNIQUE(key) + ); +`) + +const schemaVersionQuery = db.query("SELECT version FROM metadata WHERE key = 'schema_version'") +const setSchemaVersionQuery = db.query("UPDATE metadata SET value = $schemaVersion WHERE key = 'schema_version'") + +const migrations = [ + ` +CREATE TABLE IF NOT EXISTS users( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + password TEXT NOT NULL, +); + +CREATE TABLE IF NOT EXISTS bookmarks( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + kind TEXT NOT NULL, + title TEXT NOT NULL, + url TEXT NOT NULL +); + +CREATE TABLE IF NOT EXISTS sessions( + session_id TEXT NOT NULL, + user_id TEXT NOT NULL, + expires_at_unix_ms INTEGER NOT NULL, + PRIMARY KEY (session_id, user_id) +); + +CREATE TABLE IF NOT EXISTS auth_tokens( + id TEXT PRIMARY KEY, + token TEXT NOT NULL, + user_id TEXT NOT NULL, + expires_at_unix_ms INTEGER NOT NULL +); +`, +] + +const executeMigrations = db.transaction((migration) => { + db.run(migration) +}) + +function migrateDatabase() { + createMetadataTableQuery.run() + + const row = schemaVersionQuery.get() + let currentVersion: number + if (row) { + currentVersion = (row as { version: number }).version + console.log(`Migrating database from version ${currentVersion} to version ${SCHEMA_VERSION}...`) + } else { + currentVersion = -1 + console.log("Initializing database...") + } + + if (currentVersion < SCHEMA_VERSION) { + executeMigrations(migrations.slice(currentVersion + 1, SCHEMA_VERSION + 1)) + setSchemaVersionQuery.run({ schemaVersion: SCHEMA_VERSION }) + console.log("Database successfully migrated!") + } else { + console.error("Rolling back database to a previous version is unsupported. Are you trying to downgrade MARKONE?") + } +} + +export { db, migrateDatabase } diff --git a/packages/server/src/error.ts b/packages/server/src/error.ts new file mode 100644 index 0000000..58decdb --- /dev/null +++ b/packages/server/src/error.ts @@ -0,0 +1,8 @@ +class HttpError { + constructor( + public readonly status: number, + public readonly message?: string, + ) {} +} + +export { HttpError } diff --git a/packages/server/src/http-handler.ts b/packages/server/src/http-handler.ts new file mode 100644 index 0000000..54a4569 --- /dev/null +++ b/packages/server/src/http-handler.ts @@ -0,0 +1,22 @@ +import { HttpError } from "./error.ts" + +function httpHandler( + handler: (request: Bun.BunRequest) => Promise, +): (request: Bun.BunRequest) => Promise { + return async (request) => { + try { + const response = await handler(request) + return response + } catch (error) { + if (error instanceof HttpError) { + if (error.message) { + return Response.json({ message: error.message }, { status: error.status }) + } + return new Response(undefined, { status: error.status }) + } + return new Response(undefined, { status: 500 }) + } + } +} + +export { httpHandler } diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts new file mode 100644 index 0000000..d00dd3d --- /dev/null +++ b/packages/server/src/server.ts @@ -0,0 +1,31 @@ +import { authenticated, login, logout, signUp } from "./auth/auth.ts" +import { startBackgroundSessionCleanup } from "./auth/session.ts" +import { listUserBookmarks } from "./bookmark/handlers.ts" +import { migrateDatabase } from "./database.ts" +import { httpHandler } from "./http-handler.ts" +import { createDemoUser } from "./user/user.ts" + +function main() { + migrateDatabase() + createDemoUser() + startBackgroundSessionCleanup() + + Bun.serve({ + routes: { + "/api/login": { + POST: httpHandler(login), + }, + "/api/sign-up": { + POST: httpHandler(signUp), + }, + "/api/logout": { + POST: authenticated(logout), + }, + "/api/bookmarks": { + GET: authenticated(listUserBookmarks), + }, + }, + }) +} + +main() diff --git a/packages/server/src/user/user.ts b/packages/server/src/user/user.ts new file mode 100644 index 0000000..b82a3b3 --- /dev/null +++ b/packages/server/src/user/user.ts @@ -0,0 +1,62 @@ +import { type User, DEMO_USER } from "@markone/core/user" +import { ulid } from "ulid" +import { db } from "~/database.ts" + +interface UserWithPassword extends User { + password: string +} + +const findUserByIdQuery = db.query("SELECT id, username FROM users WHERE id = $userId") + +const findUserByUsernameQuery = db.query("SELECT id, username FROM users WHERE username = $username") +const findUserByUsernameWithPwQuery = db.query("SELECT id, username, password FROM users WHERE username = $username") + +const createUserQuery = db.query("INSERT INTO users(id, username, password) VALUES ($id, $username, $password)") + +function findUserByUsername(username: string, opts: { password: true }): UserWithPassword | null +function findUserByUsername(username: string, { password }: { password?: boolean }): User | UserWithPassword | null { + const row = (password ? findUserByUsernameWithPwQuery : findUserByUsernameQuery).get({ username }) + if (!row) { + return null + } + return row as User +} + +function findUserById(userId: string): User | null { + const row = findUserByIdQuery.get({ userId }) + if (!row) { + return null + } + return row as User +} + +function createUser(username: string, password: string): User { + const userId = ulid() + createUserQuery.run({ + id: userId, + username, + password, + }) + return { + id: userId, + username, + } +} + +async function createDemoUser() { + const row = findUserByUsernameQuery.get({ username: DEMO_USER.username }) + if (row) { + return + } + + const hashedPassword = await Bun.password.hash(DEMO_USER.unhashedPassword, "argon2id") + + createUserQuery.run({ + id: DEMO_USER.id, + username: DEMO_USER.username, + password: hashedPassword, + }) +} + +export type { User } +export { DEMO_USER, createDemoUser, createUser, findUserByUsername, findUserById } diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json new file mode 100644 index 0000000..9cb0651 --- /dev/null +++ b/packages/server/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "NodeNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "NodeNext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + + // Some stricter flags (disabled by default) + "noPropertyAccessFromIndexSignature": false, + + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/README.md b/packages/web/README.md similarity index 100% rename from README.md rename to packages/web/README.md diff --git a/index.html b/packages/web/index.html similarity index 100% rename from index.html rename to packages/web/index.html diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 0000000..9101325 --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,42 @@ +{ + "name": "@markone/web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@markone/core": "workspace:*", + "@tailwindcss/vite": "^4.1.5", + "@tanstack/react-query": "^5.75.2", + "@tanstack/react-router": "^1.119.0", + "clsx": "^2.1.1", + "dayjs": "^1.11.13", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "tailwindcss": "^4.1.5", + "zustand": "^5.0.4" + }, + "devDependencies": { + "@tanstack/react-router-devtools": "^1.119.1", + "@tanstack/router-plugin": "^1.119.0", + "@types/node": "^22.15.3", + "@types/react": "^19.0.8", + "@types/react-dom": "^19.0.3", + "@vite-pwa/assets-generator": "^0.2.6", + "@vitejs/plugin-react": "^4.2.1", + "globals": "^15.14.0", + "typescript": "~5.7.2", + "vite": "^6.0.11", + "vite-plugin-pwa": "^0.21.1", + "workbox-core": "^7.3.0", + "workbox-window": "^7.3.0" + }, + "resolutions": { + "sharp": "0.32.6", + "sharp-ico": "0.1.5" + } +} diff --git a/public/favicon.svg b/packages/web/public/favicon.svg similarity index 100% rename from public/favicon.svg rename to packages/web/public/favicon.svg diff --git a/packages/web/pwa-assets.config.ts b/packages/web/pwa-assets.config.ts new file mode 100644 index 0000000..6dbfbda --- /dev/null +++ b/packages/web/pwa-assets.config.ts @@ -0,0 +1,9 @@ +import { defineConfig, minimal2023Preset as preset } from "@vite-pwa/assets-generator/config" + +export default defineConfig({ + headLinkOptions: { + preset: "2023", + }, + preset, + images: ["public/favicon.svg"], +}) diff --git a/packages/web/src/PWABadge.css b/packages/web/src/PWABadge.css new file mode 100644 index 0000000..d209598 --- /dev/null +++ b/packages/web/src/PWABadge.css @@ -0,0 +1,29 @@ +.PWABadge-container { + padding: 0; + margin: 0; + width: 0; + height: 0; +} +.PWABadge-toast { + position: fixed; + right: 0; + bottom: 0; + margin: 16px; + padding: 12px; + border: 1px solid #8885; + border-radius: 4px; + z-index: 1; + text-align: left; + box-shadow: 3px 4px 5px 0 #8885; + background-color: white; +} +.PWABadge-toast-message { + margin-bottom: 8px; +} +.PWABadge-toast-button { + border: 1px solid #8885; + outline: none; + margin-right: 5px; + border-radius: 2px; + padding: 3px 10px; +} diff --git a/packages/web/src/PWABadge.tsx b/packages/web/src/PWABadge.tsx new file mode 100644 index 0000000..d4f2096 --- /dev/null +++ b/packages/web/src/PWABadge.tsx @@ -0,0 +1,80 @@ +import "./PWABadge.css" + +import { useRegisterSW } from "virtual:pwa-register/react" + +function PWABadge() { + // check for updates every hour + const period = 60 * 60 * 1000 + + const { + offlineReady: [offlineReady, setOfflineReady], + needRefresh: [needRefresh, setNeedRefresh], + updateServiceWorker, + } = useRegisterSW({ + onRegisteredSW(swUrl, r) { + if (period <= 0) return + if (r?.active?.state === "activated") { + registerPeriodicSync(period, swUrl, r) + } else if (r?.installing) { + r.installing.addEventListener("statechange", (e) => { + const sw = e.target as ServiceWorker + if (sw.state === "activated") registerPeriodicSync(period, swUrl, r) + }) + } + }, + }) + + function close() { + setOfflineReady(false) + setNeedRefresh(false) + } + + return ( +

+ {(offlineReady || needRefresh) && ( +
+
+ {offlineReady ? ( + App ready to work offline + ) : ( + New content available, click on reload button to update. + )} +
+
+ {needRefresh && ( + + )} + +
+
+ )} +
+ ) +} + +export default PWABadge + +/** + * This function will register a periodic sync check every hour, you can modify the interval as needed. + */ +function registerPeriodicSync(period: number, swUrl: string, r: ServiceWorkerRegistration) { + if (period <= 0) return + + setInterval(async () => { + if ("onLine" in navigator && !navigator.onLine) return + + const resp = await fetch(swUrl, { + cache: "no-store", + headers: { + cache: "no-store", + "cache-control": "no-cache", + }, + }) + + if (resp?.status === 200) await r.update() + }, period) +} diff --git a/src/app/-route-tree.gen.ts b/packages/web/src/app/-route-tree.gen.ts similarity index 67% rename from src/app/-route-tree.gen.ts rename to packages/web/src/app/-route-tree.gen.ts index fe359f3..af05d63 100644 --- a/src/app/-route-tree.gen.ts +++ b/packages/web/src/app/-route-tree.gen.ts @@ -11,23 +11,23 @@ // Import Routes import { Route as rootRoute } from "./__root" +import { Route as BookmarksImport } from "./bookmarks" import { Route as IndexImport } from "./index" -import { Route as UsernameBookmarksImport } from "./$username/bookmarks" // Create/Update Routes +const BookmarksRoute = BookmarksImport.update({ + id: "/bookmarks", + path: "/bookmarks", + getParentRoute: () => rootRoute, +} as any) + const IndexRoute = IndexImport.update({ id: "/", path: "/", getParentRoute: () => rootRoute, } as any) -const UsernameBookmarksRoute = UsernameBookmarksImport.update({ - id: "/$username/bookmarks", - path: "/$username/bookmarks", - getParentRoute: () => rootRoute, -} as any) - // Populate the FileRoutesByPath interface declare module "@tanstack/react-router" { @@ -39,11 +39,11 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof IndexImport parentRoute: typeof rootRoute } - "/$username/bookmarks": { - id: "/$username/bookmarks" - path: "/$username/bookmarks" - fullPath: "/$username/bookmarks" - preLoaderRoute: typeof UsernameBookmarksImport + "/bookmarks": { + id: "/bookmarks" + path: "/bookmarks" + fullPath: "/bookmarks" + preLoaderRoute: typeof BookmarksImport parentRoute: typeof rootRoute } } @@ -53,37 +53,37 @@ declare module "@tanstack/react-router" { export interface FileRoutesByFullPath { "/": typeof IndexRoute - "/$username/bookmarks": typeof UsernameBookmarksRoute + "/bookmarks": typeof BookmarksRoute } export interface FileRoutesByTo { "/": typeof IndexRoute - "/$username/bookmarks": typeof UsernameBookmarksRoute + "/bookmarks": typeof BookmarksRoute } export interface FileRoutesById { __root__: typeof rootRoute "/": typeof IndexRoute - "/$username/bookmarks": typeof UsernameBookmarksRoute + "/bookmarks": typeof BookmarksRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: "/" | "/$username/bookmarks" + fullPaths: "/" | "/bookmarks" fileRoutesByTo: FileRoutesByTo - to: "/" | "/$username/bookmarks" - id: "__root__" | "/" | "/$username/bookmarks" + to: "/" | "/bookmarks" + id: "__root__" | "/" | "/bookmarks" fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute - UsernameBookmarksRoute: typeof UsernameBookmarksRoute + BookmarksRoute: typeof BookmarksRoute } const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, - UsernameBookmarksRoute: UsernameBookmarksRoute, + BookmarksRoute: BookmarksRoute, } export const routeTree = rootRoute @@ -97,14 +97,14 @@ export const routeTree = rootRoute "filePath": "__root.tsx", "children": [ "/", - "/$username/bookmarks" + "/bookmarks" ] }, "/": { "filePath": "index.tsx" }, - "/$username/bookmarks": { - "filePath": "$username/bookmarks.tsx" + "/bookmarks": { + "filePath": "bookmarks.tsx" } } } diff --git a/src/app/__root.tsx b/packages/web/src/app/__root.tsx similarity index 71% rename from src/app/__root.tsx rename to packages/web/src/app/__root.tsx index 119dfa2..1544791 100644 --- a/src/app/__root.tsx +++ b/packages/web/src/app/__root.tsx @@ -1,5 +1,5 @@ -import { createRootRoute, Outlet } from "@tanstack/react-router"; -import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"; +import { Outlet, createRootRoute } from "@tanstack/react-router" +import { TanStackRouterDevtools } from "@tanstack/react-router-devtools" function Root() { return ( @@ -7,9 +7,9 @@ function Root() { - ); + ) } export const Route = createRootRoute({ component: Root, -}); +}) diff --git a/src/app/$username/bookmarks.tsx b/packages/web/src/app/bookmarks.tsx similarity index 53% rename from src/app/$username/bookmarks.tsx rename to packages/web/src/app/bookmarks.tsx index fae72f5..27800ee 100644 --- a/src/app/$username/bookmarks.tsx +++ b/packages/web/src/app/bookmarks.tsx @@ -1,9 +1,9 @@ -import { useEffect } from "react"; -import { createFileRoute } from "@tanstack/react-router"; -import { create } from "zustand"; -import clsx from "clsx"; -import { Button } from "~/components/button"; -import type { LinkBookmark } from "~/bookmark/bookmark"; +import type { LinkBookmark } from "@markone/core/bookmark" +import { createFileRoute } from "@tanstack/react-router" +import clsx from "clsx" +import { useEffect } from "react" +import { create } from "zustand" +import { Button } from "~/components/button" const testBookmarks: LinkBookmark[] = [ { @@ -18,25 +18,25 @@ const testBookmarks: LinkBookmark[] = [ title: "Running a Docker container as a non-root user", url: "https://test.website.com/article/123", }, -]; +] const LAYOUT_MODE = { popup: "popup", sideBySide: "side-by-side", -} as const; -type LayoutMode = (typeof LAYOUT_MODE)[keyof typeof LAYOUT_MODE]; +} as const +type LayoutMode = (typeof LAYOUT_MODE)[keyof typeof LAYOUT_MODE] interface BookmarkPageState { - bookmarks: LinkBookmark[]; - selectedBookmarkIndex: number; - isBookmarkItemExpanded: boolean; - isBookmarkPreviewOpened: boolean; - layoutMode: LayoutMode; + bookmarks: LinkBookmark[] + selectedBookmarkIndex: number + isBookmarkItemExpanded: boolean + isBookmarkPreviewOpened: boolean + layoutMode: LayoutMode - setBookmarkItemExpanded: (isExpanded: boolean) => void; - setBookmarkPreviewOpened: (isOpened: boolean) => void; - setLayoutMode: (mode: LayoutMode) => void; - selectBookmarkAt: (index: number) => void; + setBookmarkItemExpanded: (isExpanded: boolean) => void + setBookmarkPreviewOpened: (isOpened: boolean) => void + setLayoutMode: (mode: LayoutMode) => void + selectBookmarkAt: (index: number) => void } const useBookmarkPageStore = create()((set, get) => ({ @@ -47,75 +47,75 @@ const useBookmarkPageStore = create()((set, get) => ({ layoutMode: LAYOUT_MODE.popup, setBookmarkItemExpanded(isExpanded: boolean) { - set({ isBookmarkItemExpanded: isExpanded }); + set({ isBookmarkItemExpanded: isExpanded }) }, setBookmarkPreviewOpened(isOpened: boolean) { - set({ isBookmarkPreviewOpened: isOpened }); + set({ isBookmarkPreviewOpened: isOpened }) }, setLayoutMode(mode: LayoutMode) { - set({ layoutMode: mode }); + set({ layoutMode: mode }) }, selectBookmarkAt(index: number) { - const bookmarks = get().bookmarks; + const bookmarks = get().bookmarks if (index >= 0 && index < bookmarks.length) { - set({ selectedBookmarkIndex: index }); + set({ selectedBookmarkIndex: index }) } }, -})); +})) function Page() { - const setLayoutMode = useBookmarkPageStore((state) => state.setLayoutMode); + const setLayoutMode = useBookmarkPageStore((state) => state.setLayoutMode) useEffect(() => { function onKeyDown(event: KeyboardEvent) { - const state = useBookmarkPageStore.getState(); + const state = useBookmarkPageStore.getState() switch (event.key) { case "ArrowDown": - state.selectBookmarkAt(state.selectedBookmarkIndex + 1); - break; + state.selectBookmarkAt(state.selectedBookmarkIndex + 1) + break case "ArrowUp": - state.selectBookmarkAt(state.selectedBookmarkIndex - 1); - break; + state.selectBookmarkAt(state.selectedBookmarkIndex - 1) + break case "ArrowLeft": - state.setBookmarkItemExpanded(false); - break; + state.setBookmarkItemExpanded(false) + break case "ArrowRight": - state.setBookmarkItemExpanded(true); - break; + state.setBookmarkItemExpanded(true) + break default: - break; + break } } - window.addEventListener("keydown", onKeyDown); + window.addEventListener("keydown", onKeyDown) return () => { - window.removeEventListener("keydown", onKeyDown); - }; - }, [useBookmarkPageStore]); + window.removeEventListener("keydown", onKeyDown) + } + }, []) useEffect(() => { function mediaQueryListener(this: MediaQueryList) { if (this.matches) { - setLayoutMode(LAYOUT_MODE.sideBySide); + setLayoutMode(LAYOUT_MODE.sideBySide) } else { - setLayoutMode(LAYOUT_MODE.popup); + setLayoutMode(LAYOUT_MODE.popup) } } - const q = window.matchMedia("(width >= 64rem)"); - q.addEventListener("change", mediaQueryListener); + const q = window.matchMedia("(width >= 64rem)") + q.addEventListener("change", mediaQueryListener) - mediaQueryListener.call(q); + mediaQueryListener.call(q) return () => { - q.removeEventListener("change", mediaQueryListener); - }; - }, []); + q.removeEventListener("change", mediaQueryListener) + } + }, [setLayoutMode]) return (
@@ -129,48 +129,38 @@ function Page() {
{testBookmarks.map((bookmark, i) => ( - + ))}
- ); + ) } function Main({ children }: React.PropsWithChildren) { - const isPreviewOpened = useBookmarkPageStore( - (state) => state.isBookmarkPreviewOpened, - ); - const layoutMode = useBookmarkPageStore((state) => state.layoutMode); + const isPreviewOpened = useBookmarkPageStore((state) => state.isBookmarkPreviewOpened) + const layoutMode = useBookmarkPageStore((state) => state.layoutMode) return (
{children}
- ); + ) } function BookmarkPreview() { - const isVisible = useBookmarkPageStore( - (state) => state.isBookmarkPreviewOpened, - ); - const layoutMode = useBookmarkPageStore((state) => state.layoutMode); + const isVisible = useBookmarkPageStore((state) => state.isBookmarkPreviewOpened) + const layoutMode = useBookmarkPageStore((state) => state.layoutMode) if (!isVisible) { - return null; + return null } return ( @@ -184,36 +174,23 @@ function BookmarkPreview() { >

Content here

- ); + ) } -function BookmarkListItem({ - bookmark, - index, -}: { bookmark: LinkBookmark; index: number }) { - const url = new URL(bookmark.url); - const selectedBookmark = useBookmarkPageStore( - (state) => state.bookmarks[state.selectedBookmarkIndex], - ); - const isSelected = selectedBookmark.id === bookmark.id; - const isBookmarkItemExpanded = useBookmarkPageStore( - (state) => state.isBookmarkItemExpanded, - ); - const setBookmarkItemExpanded = useBookmarkPageStore( - (state) => state.setBookmarkItemExpanded, - ); - const selectBookmarkAt = useBookmarkPageStore( - (state) => state.selectBookmarkAt, - ); - const setBookmarkPreviewOpened = useBookmarkPageStore( - (state) => state.setBookmarkPreviewOpened, - ); +function BookmarkListItem({ bookmark, index }: { bookmark: LinkBookmark; index: number }) { + const url = new URL(bookmark.url) + const selectedBookmark = useBookmarkPageStore((state) => state.bookmarks[state.selectedBookmarkIndex]) + const isSelected = selectedBookmark.id === bookmark.id + const isBookmarkItemExpanded = useBookmarkPageStore((state) => state.isBookmarkItemExpanded) + const setBookmarkItemExpanded = useBookmarkPageStore((state) => state.setBookmarkItemExpanded) + const selectBookmarkAt = useBookmarkPageStore((state) => state.selectBookmarkAt) + const setBookmarkPreviewOpened = useBookmarkPageStore((state) => state.setBookmarkPreviewOpened) function expandOrOpenPreview() { - setBookmarkItemExpanded(true); + setBookmarkItemExpanded(true) if (useBookmarkPageStore.getState().layoutMode === LAYOUT_MODE.sideBySide) { - console.log(useBookmarkPageStore.getState().layoutMode); - setBookmarkPreviewOpened(true); + console.log(useBookmarkPageStore.getState().layoutMode) + setBookmarkPreviewOpened(true) } } @@ -225,21 +202,19 @@ function BookmarkListItem({ })} onMouseEnter={() => { if (!isBookmarkItemExpanded) { - selectBookmarkAt(index); + selectBookmarkAt(index) } }} >
-

{url.host}

{isBookmarkItemExpanded && isSelected ? (
-

- #dev #devops #devops #devops #devops #devops #devops -

+

#dev #devops #devops #devops #devops #devops #devops

- ); + ) } function OpenBookmarkPreviewButton() { - const isBookmarkPreviewOpened = useBookmarkPageStore( - (state) => state.isBookmarkPreviewOpened, - ); - const setBookmarkPreviewOpened = useBookmarkPageStore( - (state) => state.setBookmarkPreviewOpened, - ); - const setBookmarkItemExpanded = useBookmarkPageStore( - (state) => state.setBookmarkItemExpanded, - ); + const isBookmarkPreviewOpened = useBookmarkPageStore((state) => state.isBookmarkPreviewOpened) + const setBookmarkPreviewOpened = useBookmarkPageStore((state) => state.setBookmarkPreviewOpened) + const setBookmarkItemExpanded = useBookmarkPageStore((state) => state.setBookmarkItemExpanded) useEffect(() => { function onKeyDown(event: KeyboardEvent) { if (isBookmarkPreviewOpened && event.key === "c") { - closePreview(); + closePreview() } else if (!isBookmarkPreviewOpened && event.key === "o") { - openPreview(); + openPreview() } } - window.addEventListener("keydown", onKeyDown); + window.addEventListener("keydown", onKeyDown) return () => { - window.removeEventListener("keydown", onKeyDown); - }; - }, [isBookmarkPreviewOpened]); + window.removeEventListener("keydown", onKeyDown) + } + }, [isBookmarkPreviewOpened]) function closePreview() { - setBookmarkPreviewOpened(false); - setBookmarkItemExpanded(false); + setBookmarkPreviewOpened(false) + setBookmarkItemExpanded(false) } function openPreview() { - setBookmarkPreviewOpened(true); + setBookmarkPreviewOpened(true) } return ( @@ -315,9 +282,9 @@ function OpenBookmarkPreviewButton() { className="text-sm" onClick={() => { if (isBookmarkPreviewOpened) { - closePreview(); + closePreview() } else { - openPreview(); + openPreview() } }} > @@ -331,9 +298,9 @@ function OpenBookmarkPreviewButton() { )} - ); + ) } -export const Route = createFileRoute("/$username/bookmarks")({ +export const Route = createFileRoute("/bookmarks")({ component: Page, -}); +}) diff --git a/src/app/index.tsx b/packages/web/src/app/index.tsx similarity index 54% rename from src/app/index.tsx rename to packages/web/src/app/index.tsx index bcab386..1da826b 100644 --- a/src/app/index.tsx +++ b/packages/web/src/app/index.tsx @@ -1,5 +1,7 @@ -import { createFileRoute } from "@tanstack/react-router"; -import { Link } from "~/components/link"; +import { DEMO_USER } from "@markone/core/user" +import { createFileRoute, useNavigate } from "@tanstack/react-router" +import { useLogin } from "~/auth" +import { Link } from "~/components/link" function Index() { return ( @@ -13,7 +15,7 @@ function Index() {
LOGIN SIGN UP - DEMO +
@@ -23,10 +25,7 @@ function Index() { MARKONE is a local-first, self-hostable bookmark manager.

    -
  • - * Curate interesting websites you find online, and let MARKONE - archive them. -
  • +
  • * Curate interesting websites you find online, and let MARKONE archive them.
  • * Reference your saved bookmarks anytime, even when offline.
  • * Share your collections to others with a permalink.
@@ -40,15 +39,37 @@ function Index() {

TECHNICAL STUFF
- Source code, as well as hosting guide for MARKONE is{" "} - available here. + Source code, as well as hosting guide for MARKONE is available here.

- ); + ) +} + +function DemoButton() { + const loginMutation = useLogin() + const navigate = useNavigate() + + async function startDemo() { + await loginMutation.mutateAsync({ + username: DEMO_USER.username, + password: DEMO_USER.unhashedPassword, + }) + navigate({ to: "/bookmarks" }) + } + + return ( + + ) } export const Route = createFileRoute("/")({ component: Index, -}); +}) diff --git a/src/assets/react.svg b/packages/web/src/assets/react.svg similarity index 100% rename from src/assets/react.svg rename to packages/web/src/assets/react.svg diff --git a/packages/web/src/auth.ts b/packages/web/src/auth.ts new file mode 100644 index 0000000..6c3676d --- /dev/null +++ b/packages/web/src/auth.ts @@ -0,0 +1,14 @@ +import { useMutation } from "@tanstack/react-query" + +function useLogin() { + return useMutation({ + mutationFn: async (creds: { username: string; password: string }) => { + await fetch("/api/login", { + method: "POST", + body: JSON.stringify(creds), + }) + }, + }) +} + +export { useLogin } diff --git a/src/components/button.tsx b/packages/web/src/components/button.tsx similarity index 65% rename from src/components/button.tsx rename to packages/web/src/components/button.tsx index b0a9fb3..2587758 100644 --- a/src/components/button.tsx +++ b/packages/web/src/components/button.tsx @@ -1,12 +1,9 @@ -import clsx from "clsx"; +import clsx from "clsx" function Button({ className, ...props -}: React.DetailedHTMLProps< - React.ButtonHTMLAttributes, - HTMLButtonElement ->) { +}: React.DetailedHTMLProps, HTMLButtonElement>) { return (
} - - - - )} - - ) -} - -export default PWABadge - -/** - * This function will register a periodic sync check every hour, you can modify the interval as needed. - */ -function registerPeriodicSync(period: number, swUrl: string, r: ServiceWorkerRegistration) { - if (period <= 0) return - - setInterval(async () => { - if ('onLine' in navigator && !navigator.onLine) - return - - const resp = await fetch(swUrl, { - cache: 'no-store', - headers: { - 'cache': 'no-store', - 'cache-control': 'no-cache', - }, - }) - - if (resp?.status === 200) - await r.update() - }, period) -} diff --git a/src/auth/auth.ts b/src/auth/auth.ts deleted file mode 100644 index ed7665f..0000000 --- a/src/auth/auth.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { HttpError, httpHandler } from "~/server-util"; -import dayjs from "dayjs"; -import { ulid } from "ulid"; -import { - createSessionForUser, - verifySession, - extendSession, - saveSession, - forgetAllSessions, -} from "./session"; -import { db } from "~/database"; -import { - createUser, - findUserById, - findUserByUsername, - type User, -} from "~/user/user"; -import { type } from "arktype"; - -const SignUpRequest = type({ - username: "string", - password: "string", -}); - -const LoginRequest = type({ - username: "string", - password: "string", -}); - -const createAuthTokenQuery = db.query( - "INSERT INTO auth_tokens(id, token, user_id, expires_at_unix_ms) VALUES ($id, $token, $userId, $expiresAt)", -); - -const deleteAuthTokenQuery = db.query("DELETE FROM auth_tokens WHERE id = $id"); - -const deleteAllAuthTokensQuery = db.query( - "DELETE FROM auth_tokens WHERE user_id = $userId", -); - -function authenticated( - handler: (request: Bun.BunRequest, user: User) => Promise, -) { - return httpHandler((request) => { - const session = verifySession(request.cookies); - if (!session) { - throw new HttpError(401); - } - - const user = findUserById(session.userId); - if (!user) { - throw new HttpError(401); - } - - const authTokenCookie = request.cookies.get("auth-token"); - if (authTokenCookie) { - const tokenId = authTokenCookie.split(":")[0]; - deleteAuthTokenQuery.run({ id: tokenId }); - rememberLoginForUser(user, request.cookies); - } - - const extendedSession = extendSession(session); - saveSession(extendedSession, request.cookies); - - return handler(request, user); - }); -} - -function rememberLoginForUser(user: User, cookies: Bun.CookieMap) { - const tokenId = ulid(); - - const authToken = Buffer.alloc(32); - crypto.getRandomValues(authToken); - - const hasher = new Bun.CryptoHasher("sha256"); - hasher.update(authToken); - const hashedToken = hasher.digest("base64url"); - - const expiryDate = dayjs().add(1, "month"); - - createAuthTokenQuery.run({ - id: tokenId, - token: hashedToken, - userId: user.id, - expiresAt: expiryDate.valueOf(), - }); - - cookies.set( - "auth-token", - `${tokenId}:${authToken.toBase64({ alphabet: "base64url" })}`, - { maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true }, - ); -} - -async function signUp(request: Bun.BunRequest<"/api/sign-up">) { - const body = await request.json().catch(() => { - throw new HttpError(500); - }); - - const signUpRequest = SignUpRequest(body); - if (signUpRequest instanceof type.errors) { - throw new HttpError(400, signUpRequest.summary); - } - - const { username, password } = signUpRequest; - const hashedPassword = await Bun.password.hash(password, "argon2id"); - const user = createUser(username, hashedPassword); - - await createSessionForUser(user, request.cookies); - rememberLoginForUser(user, request.cookies); - - return Response.json(user, { status: 200 }); -} - -async function login(request: Bun.BunRequest<"/api/login">) { - const body = await request.json().catch(() => { - throw new HttpError(500); - }); - - const loginRequest = LoginRequest(body); - if (loginRequest instanceof type.errors) { - throw new HttpError(400, loginRequest.summary); - } - - const foundUser = findUserByUsername(loginRequest.username, { - password: true, - }); - if (!foundUser) { - throw new HttpError(400); - } - - const ok = await Bun.password - .verify(loginRequest.password, foundUser.password, "argon2id") - .catch(() => { - throw new HttpError(401); - }); - if (!ok) { - throw new HttpError(401); - } - - const user: User = { - id: foundUser.id, - username: foundUser.username, - }; - - await createSessionForUser(user, request.cookies); - rememberLoginForUser(user, request.cookies); - - return Response.json(user, { status: 200 }); -} - -async function logout( - request: Bun.BunRequest<"/api/logout">, - user: User, -): Promise { - forgetAllSessions(user); - deleteAllAuthTokensQuery.run({ userId: user.id }); - return new Response(undefined, { status: 200 }); -} - -export { authenticated, signUp, login, logout }; diff --git a/src/auth/session.ts b/src/auth/session.ts deleted file mode 100644 index 7319f51..0000000 --- a/src/auth/session.ts +++ /dev/null @@ -1,134 +0,0 @@ -import uid from "uid-safe"; -import dayjs from "dayjs"; -import { db } from "~/database"; -import type { User } from "~/user/user"; - -interface Session { - id: string; - signedId: string; - userId: string; - durationMs: number; - expiresAt: number; -} - -const SESSION_ID_BYTE_LENGTH = 24; -const SESSION_ID_COOKIE_NAME = "session-id"; -const SESSION_DURATION_MS = 30 * 60 * 1000; - -const findSessionQuery = db.query( - "SELECT user_id, expires_at_unix FROM sessions WHERE session_id = $sessionId", -); - -const deleteSessionQuery = db.query( - "DELETE FROM sessions WHERE session_id = $sessionId", -); - -const forgetAllSessionsQuery = db.query( - "DELETE FROM sessions WHERE user_id = $userId", -); - -const saveSessionQuery = db.query( - "INSERT INTO sessions(session_id, user_id, expires_at_unix_ms) VALUES ($sessionId, $userId, $expiresAt)", -); - -const extendSessionQuery = db.query( - "UPDATE sessions SET expires_at_unix_ms = $newExpiryDate WHERE session_id = $session_id", -); - -async function newSessionId(): Promise { - return await uid(SESSION_ID_BYTE_LENGTH); -} - -function signSessionId(sessionId: string): string { - const hasher = new Bun.CryptoHasher("sha256", Bun.env.SESSION_SECRET); - hasher.update(sessionId); - return `${sessionId}.${hasher.digest("base64url")}`; -} - -async function createSessionForUser(user: User, cookies: Bun.CookieMap) { - const sessionId = await newSessionId(); - const signedSessionId = signSessionId(sessionId); - - const expiryDate = dayjs().add(30, "minutes").valueOf(); - - saveSessionQuery.run({ - sessionId, - userId: user.id, - expiresAt: expiryDate, - }); - - cookies.set(SESSION_ID_COOKIE_NAME, signedSessionId, { - maxAge: SESSION_DURATION_MS, - httpOnly: true, - }); -} - -async function saveSession(session: Session, cookies: Bun.CookieMap) { - cookies.set(SESSION_ID_COOKIE_NAME, session.signedId, { - maxAge: SESSION_DURATION_MS, - httpOnly: true, - }); -} - -function verifySession(cookie: Bun.CookieMap): Session | null { - const signedSessionId = cookie.get(SESSION_ID_COOKIE_NAME); - if (!signedSessionId) { - return null; - } - - const value = signedSessionId.slice(0, signedSessionId.lastIndexOf(".")); - const expected = signSessionId(value); - - const a = Buffer.from(signedSessionId); - const b = Buffer.from(expected); - - const isEqual = a.length === b.length && crypto.timingSafeEqual(a, b); - if (!isEqual) { - return null; - } - - const row = findSessionQuery.get({ sessionId: value }); - if (!row) { - return null; - } - const foundSession = row as { user_id: string; expires_at_unix_ms: number }; - - const now = dayjs().valueOf(); - if (now > foundSession.expires_at_unix_ms) { - deleteSessionQuery.run({ sessionId: value }); - return null; - } - - return { - id: value, - signedId: signedSessionId, - userId: foundSession.user_id, - expiresAt: foundSession.expires_at_unix_ms, - durationMs: SESSION_DURATION_MS, - }; -} - -function extendSession(session: Session): Session { - const newExpiryDate = dayjs().add(30, "minutes").valueOf(); - extendSessionQuery.run({ - sessionId: session.id, - newExpiryDate, - }); - return { - ...session, - expiresAt: newExpiryDate, - }; -} - -function forgetAllSessions(user: User) { - forgetAllSessionsQuery.run({ userId: user.id }); -} - -export { - newSessionId, - createSessionForUser, - verifySession, - saveSession, - extendSession, - forgetAllSessions, -}; diff --git a/src/bookmark/bookmark.ts b/src/bookmark/bookmark.ts deleted file mode 100644 index 45205b7..0000000 --- a/src/bookmark/bookmark.ts +++ /dev/null @@ -1,18 +0,0 @@ -type BookmarkKind = "link" | "placeholder"; - -interface LinkBookmark { - kind: "link"; - id: string; - title: string; - url: string; -} - -interface PlaceholderBookmark { - id: string; - kind: "placeholder"; -} - -type Bookmark = LinkBookmark | PlaceholderBookmark; -type BookmarkId = Bookmark["id"]; - -export type { Bookmark, BookmarkId, BookmarkKind, LinkBookmark }; diff --git a/src/bookmark/handlers.ts b/src/bookmark/handlers.ts deleted file mode 100644 index c926dbe..0000000 --- a/src/bookmark/handlers.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { User } from "~/user/user"; -import { type } from "arktype"; -import { HttpError } from "~/server"; -import { db } from "~/database"; - -const BOOKMARK_PAGINATION_LIMIT = 100; - -const ListUserBookmarksParams = type({ - limit: ["number", "=", BOOKMARK_PAGINATION_LIMIT], - skip: ["number", "=", 5], -}); - -const listBookmarksQuery = db.query( - "SELECT id, kind, title, url FROM bookmarks WHERE user_id = $userId LIMIT $limit OFFSET $skip", -); - -async function listUserBookmarks( - request: Bun.BunRequest<"/api/bookmarks">, - user: User, -) { - const queryParams = ListUserBookmarksParams(request.params); - if (queryParams instanceof type.errors) { - throw new HttpError(400, queryParams.summary); - } - - const results = listBookmarksQuery.all({ - userId: user.id, - limit: queryParams.limit, - skip: queryParams.skip, - }); - - return Response.json(results, { status: 200 }); -} - -export { listUserBookmarks }; diff --git a/src/components/link.tsx b/src/components/link.tsx deleted file mode 100644 index 36ad71d..0000000 --- a/src/components/link.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clsx from "clsx"; - -function Link({ - className, - ...props -}: React.DetailedHTMLProps< - React.AnchorHTMLAttributes, - HTMLAnchorElement ->) { - return ( - - ); -} - -export { Link }; diff --git a/src/database.ts b/src/database.ts deleted file mode 100644 index 0704e81..0000000 --- a/src/database.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Database } from "bun:sqlite"; - -const DB_VERSION = 0; - -const db = new Database("data.sqlite"); - -const dbVersionQuery = db.query("SELECT version FROM migration"); - -const migrations = [ - ` -CREATE TABLE IF NOT EXISTS migration( - version INTEGER NOT NULL -); - -CREATE TABLE IF NOT EXISTS users( - id TEXT PRIMARY KEY, - username TEXT NOT NULL, - password TEXT NOT NULL, -); - -CREATE TABLE IF NOT EXISTS bookmarks( - id TEXT PRIMARY KEY, - user_id TEXT NOT NULL, - kind TEXT NOT NULL, - title TEXT NOT NULL, - url TEXT NOT NULL -); - -CREATE TABLE IF NOT EXISTS sessions( - session_id TEXT NOT NULL, - user_id TEXT NOT NULL, - expires_at_unix_ms INTEGER NOT NULL, - PRIMARY KEY (session_id, user_id) -); - -CREATE TABLE IF NOT EXISTS auth_tokens( - id TEXT PRIMARY KEY, - token TEXT NOT NULL, - user_id TEXT NOT NULL, - expires_at_unix_ms INTEGER NOT NULL -); -`, -]; - -function migrateDatabase() { - let row = dbVersionQuery.get(); - let currentVersion: number; - if (row) { - currentVersion = (row as { version: number }).version; - console.log( - `Migrating database from version ${currentVersion} to version ${DB_VERSION}...`, - ); - } else { - currentVersion = -1; - console.log("Initializing database..."); - } - for (let version = currentVersion + 1; version <= DB_VERSION; ++version) { - db.run(migrations[version]); - } -} - -export { db, migrateDatabase }; diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 7bb1d1d..0000000 --- a/src/index.css +++ /dev/null @@ -1,9 +0,0 @@ -@import "tailwindcss"; - -:root { - font-family: monospace; -} - -body { - @apply bg-stone-200 dark:bg-stone-900 text-stone-800 dark:text-stone-300; -} diff --git a/src/main.tsx b/src/main.tsx deleted file mode 100644 index 7ec156c..0000000 --- a/src/main.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { StrictMode } from "react"; -import { createRoot } from "react-dom/client"; -import { createRouter, RouterProvider } from "@tanstack/react-router"; -import "./index.css"; -import { routeTree } from "./app/-route-tree.gen"; - -const router = createRouter({ - routeTree, -}); - -createRoot(document.getElementById("root")!).render( - - - , -); diff --git a/src/server-main.ts b/src/server-main.ts deleted file mode 100644 index d8b0d39..0000000 --- a/src/server-main.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { authenticated, signUp, login, logout } from "./auth/auth"; -import { listUserBookmarks } from "./bookmark/handlers"; -import { migrateDatabase } from "./database"; -import { httpHandler } from "./server-util"; - -function main() { - migrateDatabase(); - - Bun.serve({ - routes: { - "/api/login": { - POST: httpHandler(login), - }, - "/api/sign-up": { - POST: httpHandler(signUp), - }, - "/api/logout": { - POST: authenticated(logout), - }, - "/api/bookmarks": { - GET: authenticated(listUserBookmarks), - }, - }, - }); -} - -main(); diff --git a/src/server-util.ts b/src/server-util.ts deleted file mode 100644 index 7a4ba95..0000000 --- a/src/server-util.ts +++ /dev/null @@ -1,30 +0,0 @@ -class HttpError { - constructor( - public readonly status: number, - public readonly message?: string, - ) {} -} - -function httpHandler( - handler: (request: Bun.BunRequest) => Promise, -): (request: Bun.BunRequest) => Promise { - return async (request) => { - try { - const response = await handler(request); - return response; - } catch (error) { - if (error instanceof HttpError) { - if (error.message) { - return Response.json( - { message: error.message }, - { status: error.status }, - ); - } - return new Response(undefined, { status: error.status }); - } - return new Response(undefined, { status: 500 }); - } - }; -} - -export { HttpError, httpHandler }; diff --git a/src/user/user.ts b/src/user/user.ts deleted file mode 100644 index 1220085..0000000 --- a/src/user/user.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { ulid } from "ulid"; -import { db } from "~/database"; - -interface User { - id: string; - username: string; -} - -interface UserWithPassword extends User { - password: string; -} - -const findUserByIdQuery = db.query( - "SELECT id, username FROM users WHERE id = $userId", -); - -const findUserByUsernameQuery = db.query( - "SELECT id, username FROM users WHERE username = $username", -); -const findUserByUsernameWithPwQuery = db.query( - "SELECT id, username, password FROM users WHERE username = $username", -); - -const createUserQuery = db.query( - "INSERT INTO users(id, username, password) VALUES ($id, $username, $password)", -); - -function findUserByUsername( - username: string, - opts: { password: true }, -): UserWithPassword | null; -function findUserByUsername( - username: string, - { password }: { password?: boolean }, -): User | UserWithPassword | null { - const row = ( - password ? findUserByUsernameWithPwQuery : findUserByUsernameQuery - ).get({ username }); - if (!row) { - return null; - } - return row as User; -} - -function findUserById(userId: string): User | null { - const row = findUserByIdQuery.get({ userId }); - if (!row) { - return null; - } - return row as User; -} - -function createUser(username: string, password: string): User { - const userId = ulid(); - createUserQuery.run({ - id: userId, - username, - password, - }); - return { - id: userId, - username, - }; -} - -export type { User }; -export { createUser, findUserByUsername, findUserById }; diff --git a/tsconfig.app.json b/tsconfig.app.json deleted file mode 100644 index 1e36d59..0000000 --- a/tsconfig.app.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "experimentalDecorators": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true, - - "baseUrl": ".", - "paths": { - "~/*": ["src/*"] - } - }, - "include": ["src"] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 1ffef60..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] -} diff --git a/tsconfig.node.json b/tsconfig.node.json deleted file mode 100644 index db0becc..0000000 --- a/tsconfig.node.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "target": "ES2022", - "lib": ["ES2023"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["vite.config.ts"] -}