From fff1044f218ebef718512e052105ffbc79e542e1 Mon Sep 17 00:00:00 2001 From: "Patrick M. Riley" Date: Thu, 2 Oct 2025 16:37:09 -0400 Subject: [PATCH 1/6] feat: update examples with latest auth0-ai sdks --- .gitignore | 47 +- py-langchain/README.md | 4 +- .../app/agents/tools/google_calendar.py | 8 +- .../backend/app/agents/tools/shop_online.py | 10 +- py-langchain/backend/app/core/auth0_ai.py | 7 +- py-langchain/backend/pyproject.toml | 13 +- py-langchain/backend/uv.lock | 60 +- py-langchain/frontend/auth0-ai-0.0.0.tgz | Bin 0 -> 69902 bytes py-langchain/frontend/bun.lock | 6 +- py-langchain/frontend/package.json | 2 +- .../auth0-ai/FederatedConnections/index.tsx | 28 - .../TokenVaultAuthProps.tsx} | 2 +- .../TokenVaultInterruptHandler.tsx} | 14 +- .../components/auth0-ai/TokenVault/index.tsx | 28 + .../popup.tsx | 6 +- .../redirect.tsx | 6 +- .../frontend/src/components/chat-window.tsx | 4 +- temp-packages/auth0-ai-langchain/LICENSE | 176 + temp-packages/auth0-ai-langchain/README.md | 331 ++ .../auth0_ai_langchain/FGARetriever.py | 158 + .../auth0_ai_langchain/__init__.py | 3 + .../async_authorization/__init__.py | 3 + .../async_authorization/async_authorizer.py | 17 + .../async_authorization/graph_resumer.py | 154 + .../auth0_ai_langchain/auth0_ai.py | 113 + .../auth0_ai_langchain/fga/__init__.py | 4 + .../token_vault/__init__.py | 10 + .../token_vault/token_vault_authorizer.py | 38 + .../auth0_ai_langchain/utils/interrupt.py | 30 + .../auth0_ai_langchain/utils/tool_wrapper.py | 34 + temp-packages/auth0-ai-langchain/poetry.lock | 2844 +++++++++++++++++ .../auth0-ai-langchain/pyproject.toml | 30 + .../auth0-ai-langchain/tests/__init__.py | 0 .../tests/test_FGARetriever.py | 140 + .../tests/test_QueryBuilder.py | 147 + temp-packages/auth0-ai/LICENSE | 176 + temp-packages/auth0-ai/README.md | 28 + temp-packages/auth0-ai/auth0_ai/__init__.py | 0 .../auth0-ai/auth0_ai/authorizers/__init__.py | 0 .../authorizers/async_auth/__init__.py | 0 .../async_authorization/__init__.py | 3 + .../async_authorization_request.py | 14 + .../async_authorizer_base.py | 296 ++ .../async_authorizer_params.py | 48 + .../auth0-ai/auth0_ai/authorizers/context.py | 36 + .../auth0_ai/authorizers/fga_authorizer.py | 102 + .../authorizers/token_vault_authorizer.py | 292 ++ .../auth0-ai/auth0_ai/authorizers/types.py | 43 + .../auth0-ai/auth0_ai/credentials.py | 9 + .../auth0-ai/auth0_ai/interrupts/__init__.py | 0 .../async_authorization_interrupts.py | 104 + .../auth0_ai/interrupts/auth0_interrupt.py | 39 + .../interrupts/token_vault_interrupt.py | 61 + .../auth0-ai/auth0_ai/stores/__init__.py | 4 + .../auth0-ai/auth0_ai/stores/impl/fs_store.py | 125 + .../auth0_ai/stores/impl/in_memory_store.py | 55 + .../auth0-ai/auth0_ai/stores/store.py | 67 + .../auth0-ai/auth0_ai/stores/sub_store.py | 76 + temp-packages/auth0-ai/auth0_ai/utils.py | 20 + temp-packages/auth0-ai/poetry.lock | 1655 ++++++++++ temp-packages/auth0-ai/pyproject.toml | 20 + 61 files changed, 7662 insertions(+), 88 deletions(-) create mode 100644 py-langchain/frontend/auth0-ai-0.0.0.tgz delete mode 100644 py-langchain/frontend/src/components/auth0-ai/FederatedConnections/index.tsx rename py-langchain/frontend/src/components/auth0-ai/{FederatedConnections/FederatedConnectionAuthProps.tsx => TokenVault/TokenVaultAuthProps.tsx} (95%) rename py-langchain/frontend/src/components/auth0-ai/{FederatedConnections/FederatedConnectionsInterruptHandler.tsx => TokenVault/TokenVaultInterruptHandler.tsx} (63%) create mode 100644 py-langchain/frontend/src/components/auth0-ai/TokenVault/index.tsx rename py-langchain/frontend/src/components/auth0-ai/{FederatedConnections => TokenVault}/popup.tsx (93%) rename py-langchain/frontend/src/components/auth0-ai/{FederatedConnections => TokenVault}/redirect.tsx (85%) create mode 100644 temp-packages/auth0-ai-langchain/LICENSE create mode 100644 temp-packages/auth0-ai-langchain/README.md create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/FGARetriever.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/__init__.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/__init__.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/async_authorizer.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/graph_resumer.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/auth0_ai.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/fga/__init__.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/__init__.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/token_vault_authorizer.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/interrupt.py create mode 100644 temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/tool_wrapper.py create mode 100644 temp-packages/auth0-ai-langchain/poetry.lock create mode 100644 temp-packages/auth0-ai-langchain/pyproject.toml create mode 100644 temp-packages/auth0-ai-langchain/tests/__init__.py create mode 100644 temp-packages/auth0-ai-langchain/tests/test_FGARetriever.py create mode 100644 temp-packages/auth0-ai-langchain/tests/test_QueryBuilder.py create mode 100644 temp-packages/auth0-ai/LICENSE create mode 100644 temp-packages/auth0-ai/README.md create mode 100644 temp-packages/auth0-ai/auth0_ai/__init__.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/__init__.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/async_auth/__init__.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/__init__.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorization_request.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_base.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_params.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/context.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/fga_authorizer.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/token_vault_authorizer.py create mode 100644 temp-packages/auth0-ai/auth0_ai/authorizers/types.py create mode 100644 temp-packages/auth0-ai/auth0_ai/credentials.py create mode 100644 temp-packages/auth0-ai/auth0_ai/interrupts/__init__.py create mode 100644 temp-packages/auth0-ai/auth0_ai/interrupts/async_authorization_interrupts.py create mode 100644 temp-packages/auth0-ai/auth0_ai/interrupts/auth0_interrupt.py create mode 100644 temp-packages/auth0-ai/auth0_ai/interrupts/token_vault_interrupt.py create mode 100644 temp-packages/auth0-ai/auth0_ai/stores/__init__.py create mode 100644 temp-packages/auth0-ai/auth0_ai/stores/impl/fs_store.py create mode 100644 temp-packages/auth0-ai/auth0_ai/stores/impl/in_memory_store.py create mode 100644 temp-packages/auth0-ai/auth0_ai/stores/store.py create mode 100644 temp-packages/auth0-ai/auth0_ai/stores/sub_store.py create mode 100644 temp-packages/auth0-ai/auth0_ai/utils.py create mode 100644 temp-packages/auth0-ai/poetry.lock create mode 100644 temp-packages/auth0-ai/pyproject.toml diff --git a/.gitignore b/.gitignore index 3a1b97b..d4e067c 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,49 @@ next-env.d.ts .vscode # LangGraph API .langgraph_api -.claude/* \ No newline at end of file +.claude/* + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Python virtual environments +.env +.venv +venv/ +env/ diff --git a/py-langchain/README.md b/py-langchain/README.md index 568e807..1b3fde3 100644 --- a/py-langchain/README.md +++ b/py-langchain/README.md @@ -84,8 +84,8 @@ Finally, you can start the frontend server in another terminal: ```bash cd frontend cp .env.example .env # Copy the `.env.example` file to `.env`. -npm install -npm run dev +bun install +bun run dev ``` This will start a React vite server on port 5173. diff --git a/py-langchain/backend/app/agents/tools/google_calendar.py b/py-langchain/backend/app/agents/tools/google_calendar.py index 4fb7017..aafca02 100644 --- a/py-langchain/backend/app/agents/tools/google_calendar.py +++ b/py-langchain/backend/app/agents/tools/google_calendar.py @@ -2,8 +2,8 @@ from google.oauth2.credentials import Credentials from googleapiclient.discovery import build from pydantic import BaseModel -from auth0_ai_langchain.federated_connections import ( - get_access_token_for_connection, +from auth0_ai_langchain.token_vault import ( + get_access_token_from_token_vault, ) import datetime import json @@ -13,10 +13,10 @@ async def list_upcoming_events_fn(): """List upcoming events from the user's Google Calendar""" - google_access_token = get_access_token_for_connection() + google_access_token = get_access_token_from_token_vault() if not google_access_token: raise ValueError( - "Authorization required to access the Federated Connection API" + "Authorization required to access the Token Vault API" ) calendar_service = build( diff --git a/py-langchain/backend/app/agents/tools/shop_online.py b/py-langchain/backend/app/agents/tools/shop_online.py index 547be20..271066e 100644 --- a/py-langchain/backend/app/agents/tools/shop_online.py +++ b/py-langchain/backend/app/agents/tools/shop_online.py @@ -1,9 +1,9 @@ import httpx from langchain_core.tools import StructuredTool -from auth0_ai_langchain.ciba import get_ciba_credentials +from auth0_ai_langchain.async_authorization import get_async_authorization_credentials from pydantic import BaseModel -from app.core.auth0_ai import with_async_user_confirmation +from app.core.auth0_ai import with_async_authorization from app.core.config import settings @@ -21,10 +21,10 @@ async def shop_online_fn(product: str, quantity: int): # No API set, mock a response return f"Ordered {quantity} {product}" - credentials = get_ciba_credentials() + credentials = get_async_authorization_credentials() if not credentials: - raise ValueError("CIBA credentials not found") + raise ValueError("Async Authorization credentials not found") headers = { "Authorization": f"Bearer {credentials['access_token']}", @@ -56,7 +56,7 @@ async def shop_online_fn(product: str, quantity: int): } -shop_online = with_async_user_confirmation( +shop_online = with_async_authorization( StructuredTool( name="shop_online", description="Tool to buy products online.", diff --git a/py-langchain/backend/app/core/auth0_ai.py b/py-langchain/backend/app/core/auth0_ai.py index 9dc5c57..746d274 100644 --- a/py-langchain/backend/app/core/auth0_ai.py +++ b/py-langchain/backend/app/core/auth0_ai.py @@ -14,12 +14,12 @@ ) ) -with_calendar_access = auth0_ai.with_federated_connection( +with_calendar_access = auth0_ai.with_token_vault( connection="google-oauth2", scopes=["https://www.googleapis.com/auth/calendar.events"], ) -with_async_user_confirmation = auth0_ai.with_async_user_confirmation( +with_async_authorization = auth0_ai.with_async_authorization( audience=settings.SHOP_API_AUDIENCE, # add any scopes you want to use with your API scopes=["openid", "product:buy"], @@ -39,4 +39,7 @@ # In practice, the process that is awaiting the user confirmation # could crash or timeout before the user approves the request. on_authorization_request="block", + # Note: Setting a requested expiry greater than 300 (seconds) will force email verification + # instead of using the push notification flow. + # requested_expiry=301, ) diff --git a/py-langchain/backend/pyproject.toml b/py-langchain/backend/pyproject.toml index e42e0c4..ec043db 100644 --- a/py-langchain/backend/pyproject.toml +++ b/py-langchain/backend/pyproject.toml @@ -5,16 +5,19 @@ description = "Assistant0: An AI Personal Assistant Secured with Auth0 - LangGra readme = "README.md" requires-python = ">=3.13" dependencies = [ - "auth0-ai>=0.2.0", - "auth0-ai-langchain>=1.0.0b3", + "auth0-ai", + "auth0-ai-langchain", "auth0-fastapi>=1.0.0b4", "fastapi[standard]>=0.115.14", "google-api-python-client>=2.176.0", "httpx>=0.28.1", "itsdangerous>=2.2.0", "langchain-openai>=0.3.28", - "langgraph-cli[inmem]>=0.2.12", + "langchain-text-splitters>=0.3.0", + "langgraph-cli[inmem]>=0.3.6", "langgraph>=0.5.4", + "langgraph-api==0.2.102", + "langgraph-runtime-inmem==0.6.0", "pydantic-settings>=2.10.1", "sqlmodel>=0.0.24", "openfga-sdk>=0.9.5", @@ -24,3 +27,7 @@ dependencies = [ "langchain-postgres>=0.0.15", "greenlet>=3.2.3", ] + +[tool.uv.sources] +auth0-ai = { path = "../../temp-packages/auth0-ai", editable = true } +auth0-ai-langchain = { path = "../../temp-packages/auth0-ai-langchain", editable = true } \ No newline at end of file diff --git a/py-langchain/backend/uv.lock b/py-langchain/backend/uv.lock index 26d3c4f..6c30084 100644 --- a/py-langchain/backend/uv.lock +++ b/py-langchain/backend/uv.lock @@ -107,20 +107,22 @@ wheels = [ [[package]] name = "auth0-ai" version = "1.0.0b3" -source = { registry = "https://pypi.org/simple" } +source = { editable = "../../temp-packages/auth0-ai" } dependencies = [ { name = "auth0-python" }, { name = "openfga-sdk" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/f6/a8baf04dd66b6cb0163399fe8507fcc51531144230f011d0c59173c12c4a/auth0_ai-1.0.0b3.tar.gz", hash = "sha256:4b863c39307db0aeb5f2158f6b060cc02cdb0c5f904ed83abeb36df8c035a976", size = 17302, upload-time = "2025-07-22T14:01:37.701Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/7b/11439d928a13646e9e46259619249ed41d9d0f57749dbe9a7df2dc18a6db/auth0_ai-1.0.0b3-py3-none-any.whl", hash = "sha256:ed8300f5ce8c7692d5f88a408ec4604c86ecf7d6df9eeece4ff1ebb38fd67188", size = 25200, upload-time = "2025-07-22T14:01:36.679Z" }, + +[package.metadata] +requires-dist = [ + { name = "auth0-python", specifier = ">=4.13.0,<5.0.0" }, + { name = "openfga-sdk", specifier = ">=0.9.5,<0.10.0" }, ] [[package]] name = "auth0-ai-langchain" version = "1.0.0b3" -source = { registry = "https://pypi.org/simple" } +source = { editable = "../../temp-packages/auth0-ai-langchain" } dependencies = [ { name = "auth0-ai" }, { name = "langchain" }, @@ -129,9 +131,15 @@ dependencies = [ { name = "langgraph-sdk" }, { name = "openfga-sdk" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e0/b0/9ad2e5bb308f1388fd05b22c70b3f64ebc4d86604632168a392467927fb6/auth0_ai_langchain-1.0.0b3.tar.gz", hash = "sha256:0b5654b39bbbdff002ed276ccc4573b95ccae4cc4551c48fbf6d1caebbe8ad5a", size = 16399, upload-time = "2025-07-22T14:03:26.016Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/a8/8b337bd29ad0753189c12f9f6db28de4610f175b1f400b0c0f7efa0715a5/auth0_ai_langchain-1.0.0b3-py3-none-any.whl", hash = "sha256:6de42d1580d6178858d31dca40f27dd3f6f51b68145131476569b606c510d090", size = 17554, upload-time = "2025-07-22T14:03:24.798Z" }, + +[package.metadata] +requires-dist = [ + { name = "auth0-ai", directory = "../../temp-packages/auth0-ai" }, + { name = "langchain", specifier = ">=0.3.26,<0.4.0" }, + { name = "langchain-core", specifier = ">=0.3.69,<0.4.0" }, + { name = "langgraph", specifier = ">=0.5.3,<0.6.0" }, + { name = "langgraph-sdk", specifier = ">=0.1.73,<0.2.0" }, + { name = "openfga-sdk", specifier = ">=0.9.5,<0.10.0" }, ] [[package]] @@ -150,7 +158,7 @@ wheels = [ [[package]] name = "auth0-python" -version = "4.10.0" +version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -159,9 +167,9 @@ dependencies = [ { name = "requests" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/e3/68d004f82771f7b8e5a1bdcf4334a06fdd86c975471e30101c4c0f1a0bcd/auth0_python-4.10.0.tar.gz", hash = "sha256:fca0f29cd32618803b59a940041ee78c6304de9ab5a02cd7863f82951affdee6", size = 74755, upload-time = "2025-06-10T08:56:03.628Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/87/3c54624c8fe121a68d36dd9f9158fa6878e4be378487b8f787ddc2fa2f3d/auth0_python-4.13.0.tar.gz", hash = "sha256:72f58bd26b078e3b493e4d24928cc75fa41842aae35cef488ed6f8db0fb701fb", size = 76115, upload-time = "2025-09-17T19:26:31.643Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/e4/485d49a296fbd73d5fa33e97ddf9decf6f3d8d0c52a12df466adbf9b2590/auth0_python-4.10.0-py3-none-any.whl", hash = "sha256:c005cebbbe66bbfaa593353be76d7c9d52dc41fcb9680f815067496d5f3a9968", size = 138788, upload-time = "2025-06-10T08:56:02.141Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/3f52cf8ee6aa6e62f48020703ac3c67cf8a36ddc927dfde54b42c59a6e00/auth0_python-4.13.0-py3-none-any.whl", hash = "sha256:8e3266fcfc2e3cc4f477e01f964c0a6c9a3563653a2feb226355bc825cd4932c", size = 142088, upload-time = "2025-09-17T19:26:29.689Z" }, ] [[package]] @@ -208,8 +216,11 @@ dependencies = [ { name = "itsdangerous" }, { name = "langchain-openai" }, { name = "langchain-postgres" }, + { name = "langchain-text-splitters" }, { name = "langgraph" }, + { name = "langgraph-api" }, { name = "langgraph-cli", extra = ["inmem"] }, + { name = "langgraph-runtime-inmem" }, { name = "openfga-sdk" }, { name = "psycopg" }, { name = "psycopg-binary" }, @@ -220,8 +231,8 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "auth0-ai", specifier = ">=0.2.0" }, - { name = "auth0-ai-langchain", specifier = ">=1.0.0b3" }, + { name = "auth0-ai", editable = "../../temp-packages/auth0-ai" }, + { name = "auth0-ai-langchain", editable = "../../temp-packages/auth0-ai-langchain" }, { name = "auth0-fastapi", specifier = ">=1.0.0b4" }, { name = "fastapi", extras = ["standard"], specifier = ">=0.115.14" }, { name = "google-api-python-client", specifier = ">=2.176.0" }, @@ -230,8 +241,11 @@ requires-dist = [ { name = "itsdangerous", specifier = ">=2.2.0" }, { name = "langchain-openai", specifier = ">=0.3.28" }, { name = "langchain-postgres", specifier = ">=0.0.15" }, + { name = "langchain-text-splitters", specifier = ">=0.3.0" }, { name = "langgraph", specifier = ">=0.5.4" }, - { name = "langgraph-cli", extras = ["inmem"], specifier = ">=0.2.12" }, + { name = "langgraph-api", specifier = "==0.2.102" }, + { name = "langgraph-cli", extras = ["inmem"], specifier = ">=0.3.6" }, + { name = "langgraph-runtime-inmem", specifier = "==0.6.0" }, { name = "openfga-sdk", specifier = ">=0.9.5" }, { name = "psycopg", specifier = ">=3.2.9" }, { name = "psycopg-binary", specifier = ">=3.2.9" }, @@ -841,7 +855,7 @@ wheels = [ [[package]] name = "langchain-core" -version = "0.3.72" +version = "0.3.77" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonpatch" }, @@ -852,9 +866,9 @@ dependencies = [ { name = "tenacity" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8b/49/7568baeb96a57d3218cb5f1f113b142063679088fd3a0d0cae1feb0b3d36/langchain_core-0.3.72.tar.gz", hash = "sha256:4de3828909b3d7910c313242ab07b241294650f5cb6eac17738dd3638b1cd7de", size = 567227, upload-time = "2025-07-24T00:40:08.5Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/cc/786184e5f6a921a2aa4d2ac51d3adf0cd037289f3becff39644bee9654ee/langchain_core-0.3.77.tar.gz", hash = "sha256:1d6f2ad6bb98dd806c6c66a822fa93808d821e9f0348b28af0814b3a149830e7", size = 580255, upload-time = "2025-10-01T14:34:37.368Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/7d/9f75023c478e3b854d67da31d721e39f0eb30ae969ec6e755430cb1c0fb5/langchain_core-0.3.72-py3-none-any.whl", hash = "sha256:9fa15d390600eb6b6544397a7aa84be9564939b6adf7a2b091179ea30405b240", size = 442806, upload-time = "2025-07-24T00:40:06.994Z" }, + { url = "https://files.pythonhosted.org/packages/64/18/e7462ae0ce57caa9f6d5d975dca861e9a751e5ca253d60a809e0d833eac3/langchain_core-0.3.77-py3-none-any.whl", hash = "sha256:9966dfe3d8365847c5fb85f97dd20e3e21b1904ae87cfd9d362b7196fb516637", size = 449525, upload-time = "2025-10-01T14:34:35.672Z" }, ] [[package]] @@ -891,14 +905,14 @@ wheels = [ [[package]] name = "langchain-text-splitters" -version = "0.3.9" +version = "0.3.11" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/52/d43ad77acae169210cc476cbc1e4ab37a701017c950211a11ab500fe7d7e/langchain_text_splitters-0.3.9.tar.gz", hash = "sha256:7cd1e5a3aaf609979583eeca2eb34177622570b8fa8f586a605c6b1c34e7ebdb", size = 45260, upload-time = "2025-07-24T14:38:45.14Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/43/dcda8fd25f0b19cb2835f2f6bb67f26ad58634f04ac2d8eae00526b0fa55/langchain_text_splitters-0.3.11.tar.gz", hash = "sha256:7a50a04ada9a133bbabb80731df7f6ddac51bc9f1b9cab7fa09304d71d38a6cc", size = 46458, upload-time = "2025-08-31T23:02:58.316Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/52/7638394b88bc15083fd2c3752a843784d9d2d110d68fed6437c8607fb749/langchain_text_splitters-0.3.9-py3-none-any.whl", hash = "sha256:cee0bb816211584ea79cc79927317c358543f40404bcfdd69e69ba3ccde54401", size = 33314, upload-time = "2025-07-24T14:38:43.953Z" }, + { url = "https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl", hash = "sha256:cf079131166a487f1372c8ab5d0bfaa6c0a4291733d9c43a34a16ac9bcd6a393", size = 33845, upload-time = "2025-08-31T23:02:57.195Z" }, ] [[package]] @@ -996,7 +1010,7 @@ wheels = [ [[package]] name = "langgraph-runtime-inmem" -version = "0.6.8" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "blockbuster" }, @@ -1006,9 +1020,9 @@ dependencies = [ { name = "starlette" }, { name = "structlog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/70/af/5bb8de4f16412db4d894dafec4b83e8fcbe3e409fae2318ab95348843e8c/langgraph_runtime_inmem-0.6.8.tar.gz", hash = "sha256:7213e6c09fad509a112b9c57f7eafa99b61ff7965b5f867798fe916b5f670713", size = 79571, upload-time = "2025-07-30T22:42:01.192Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/0c/d145c6d83d36efda17b10812760711b77ec05f5bbe962c961d75b32e3c17/langgraph_runtime_inmem-0.6.0.tar.gz", hash = "sha256:b09675789a331be4a2b387c9c46de8772c4c8418e74c057b4ca24e85c25acae3", size = 77618, upload-time = "2025-07-17T16:51:01.504Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/60/702a2704b904abf8ae0338e9bdee2ca82b67cc1fa7b5a5fcaaa8601ab310/langgraph_runtime_inmem-0.6.8-py3-none-any.whl", hash = "sha256:749dbd1897eec1c46512f5723de7133369d5076bdadb6d164ce5c70f52ad48c6", size = 30291, upload-time = "2025-07-30T22:42:00.196Z" }, + { url = "https://files.pythonhosted.org/packages/12/6a/9dc5769b5d2f97d1feacbbf93b180c359dff7462454b37dfef8aed4ebcf7/langgraph_runtime_inmem-0.6.0-py3-none-any.whl", hash = "sha256:312dab25bec6557f1edf95cb8bd7c8bb52f7f4bfeecaf66e7001662f095c9079", size = 29317, upload-time = "2025-07-17T16:51:00.622Z" }, ] [[package]] diff --git a/py-langchain/frontend/auth0-ai-0.0.0.tgz b/py-langchain/frontend/auth0-ai-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7198fb3c1d1cfb5a22975325dab1195044533225 GIT binary patch literal 69902 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 literal 0 HcmV?d00001 diff --git a/py-langchain/frontend/bun.lock b/py-langchain/frontend/bun.lock index f5c5711..ac2371e 100644 --- a/py-langchain/frontend/bun.lock +++ b/py-langchain/frontend/bun.lock @@ -4,7 +4,7 @@ "": { "name": "frontend", "dependencies": { - "@auth0/ai": "^3.4.1", + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", "@langchain/core": "^0.3.66", "@langchain/langgraph-sdk": "^0.0.101", "@radix-ui/react-avatar": "^1.1.10", @@ -54,7 +54,7 @@ "packages": { "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], - "@auth0/ai": ["@auth0/ai@3.4.1", "", { "dependencies": { "@openfga/sdk": "^0.8.0", "auth0": "^4.18.0", "jose": "^5.9.6", "openid-client": "^6.1.7", "stable-hash": "^0.0.5", "tempbox": "^1.1.1", "zod": "^3.24.2" } }, "sha512-CRmeD5VVvJ/wnBVdFVCOlB/UoJGJb+wbNLk6B3/DiQHm85Y4Ak20DdaM6bZIYDU5+DeBM7JpnxJIL2V3egWPyw=="], + "@auth0/ai": ["@auth0/ai@auth0-ai-0.0.0.tgz", { "dependencies": { "@openfga/sdk": "^0.8.0", "auth0": "^4.30.0", "jose": "^5.9.6", "openid-client": "^6.1.7", "stable-hash": "^0.0.5", "tempbox": "^1.1.1", "zod": "^3.25.76" } }], "@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=="], @@ -416,7 +416,7 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "auth0": ["auth0@4.27.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-4FGgjzKCH/f7rQLQVR5dM30asjOObeW3PyHa8bQrS4rKkuv22JoNxox26fb1FZ3hI4zEgbVbPm9x7pHrljZzrw=="], + "auth0": ["auth0@4.31.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-DO9ET/o4OILQHOfNPBnF+wP3zC9IGVeCTH3pCbTlmE7+3v8RfipxkkKJ/gW3tFPb3w8qkkZHTe/SzmDjjY/CEQ=="], "axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], diff --git a/py-langchain/frontend/package.json b/py-langchain/frontend/package.json index cb241a9..6c56c04 100644 --- a/py-langchain/frontend/package.json +++ b/py-langchain/frontend/package.json @@ -10,7 +10,7 @@ "preview": "vite preview" }, "dependencies": { - "@auth0/ai": "^3.4.1", + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", "@langchain/core": "^0.3.66", "@langchain/langgraph-sdk": "^0.0.101", "@radix-ui/react-avatar": "^1.1.10", diff --git a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/index.tsx b/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/index.tsx deleted file mode 100644 index 57f8d92..0000000 --- a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { BrowserView, MobileView } from "react-device-detect"; - -import type { FederatedConnectionAuthProps } from "./FederatedConnectionAuthProps"; -import { EnsureAPIAccessPopup } from "./popup"; -import { EnsureAPIAccessRedirect } from "./redirect"; - -export function EnsureAPIAccess(props: FederatedConnectionAuthProps) { - const { mode } = props; - - switch (mode) { - case "popup": - return ; - case "redirect": - return ; - case "auto": - default: - return ( - <> - - - - - - - - ); - } -} diff --git a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/FederatedConnectionAuthProps.tsx b/py-langchain/frontend/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx similarity index 95% rename from py-langchain/frontend/src/components/auth0-ai/FederatedConnections/FederatedConnectionAuthProps.tsx rename to py-langchain/frontend/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx index 6877a46..900339a 100644 --- a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/FederatedConnectionAuthProps.tsx +++ b/py-langchain/frontend/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx @@ -9,7 +9,7 @@ import type { ReactNode } from "react"; */ export type AuthComponentMode = "redirect" | "popup" | "auto"; -export type FederatedConnectionAuthProps = { +export type TokenVaultAuthProps = { interrupt: { connection: string; requiredScopes: string[]; diff --git a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/FederatedConnectionsInterruptHandler.tsx b/py-langchain/frontend/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx similarity index 63% rename from py-langchain/frontend/src/components/auth0-ai/FederatedConnections/FederatedConnectionsInterruptHandler.tsx rename to py-langchain/frontend/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx index 714db2c..7cd298f 100644 --- a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/FederatedConnectionsInterruptHandler.tsx +++ b/py-langchain/frontend/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx @@ -1,9 +1,9 @@ -import { FederatedConnectionInterrupt } from "@auth0/ai/interrupts"; +import { TokenVaultInterrupt } from "@auth0/ai/interrupts"; import type { Interrupt } from "@langchain/langgraph-sdk"; -import { EnsureAPIAccess } from "@/components/auth0-ai/FederatedConnections"; +import { TokenVaultConsent } from "@/components/auth0-ai/TokenVault"; -interface FederatedConnectionInterruptHandlerProps { +interface TokenVaultInterruptHandlerProps { interrupt: Interrupt | undefined | null; onFinish: () => void; auth?: { @@ -12,21 +12,21 @@ interface FederatedConnectionInterruptHandlerProps { }; } -export function FederatedConnectionInterruptHandler({ +export function TokenVaultInterruptHandler({ interrupt, onFinish, auth, -}: FederatedConnectionInterruptHandlerProps) { +}: TokenVaultInterruptHandlerProps) { if ( !interrupt || - !FederatedConnectionInterrupt.isInterrupt(interrupt.value) + !TokenVaultInterrupt.isInterrupt(interrupt.value) ) { return null; } return (
- ; + case "redirect": + return ; + case "auto": + default: + return ( + <> + + + + + + + + ); + } +} diff --git a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/popup.tsx b/py-langchain/frontend/src/components/auth0-ai/TokenVault/popup.tsx similarity index 93% rename from py-langchain/frontend/src/components/auth0-ai/FederatedConnections/popup.tsx rename to py-langchain/frontend/src/components/auth0-ai/TokenVault/popup.tsx index dcb6f1e..aeab8d5 100644 --- a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/popup.tsx +++ b/py-langchain/frontend/src/components/auth0-ai/TokenVault/popup.tsx @@ -4,14 +4,14 @@ import { useCallback, useEffect, useState } from "react"; import { WaitingMessage } from "../util/loader"; import { PromptUserContainer } from "../util/prompt-user-container"; -import type { FederatedConnectionAuthProps } from "./FederatedConnectionAuthProps"; +import type { TokenVaultAuthProps } from "./TokenVaultAuthProps"; -export function EnsureAPIAccessPopup({ +export function TokenVaultConsentPopup({ interrupt: { connection, requiredScopes, resume }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = "/auth/login", returnTo = "/close" } = {}, onFinish, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { const [isLoading, setIsLoading] = useState(false); const [loginPopup, setLoginPopup] = useState(null); diff --git a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/redirect.tsx b/py-langchain/frontend/src/components/auth0-ai/TokenVault/redirect.tsx similarity index 85% rename from py-langchain/frontend/src/components/auth0-ai/FederatedConnections/redirect.tsx rename to py-langchain/frontend/src/components/auth0-ai/TokenVault/redirect.tsx index 5267f97..a92d92f 100644 --- a/py-langchain/frontend/src/components/auth0-ai/FederatedConnections/redirect.tsx +++ b/py-langchain/frontend/src/components/auth0-ai/TokenVault/redirect.tsx @@ -1,16 +1,16 @@ "use client"; import { PromptUserContainer } from "../util/prompt-user-container"; -import type { FederatedConnectionAuthProps } from "./FederatedConnectionAuthProps"; +import type { TokenVaultAuthProps } from "./TokenVaultAuthProps"; -export function EnsureAPIAccessRedirect({ +export function TokenVaultConsentRedirect({ interrupt: { requiredScopes, connection }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = "/auth/login", returnTo = window.location.pathname, } = {}, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { return (
{!!chat.interrupt?.value && ( - ⚠️ **WARNING**: `auth0-ai-langchain` is currently under development and it is not intended to be used in production, and therefore has no official support. + +```bash +pip install auth0-ai-langchain +``` + +## Async Authorization + +`Auth0AI` uses CIBA (Client-Initiated Backchannel Authentication) to handle user confirmation asynchronously. This is useful when you need to confirm a user action before proceeding with a tool execution. + +Full Example of [Async Authorization](https://github.com/auth0-lab/auth0-ai-python/tree/main/examples/async-authorization/langchain-examples). + +1. Define a tool with the proper authorizer specifying a function to resolve the user id: + +```python +from auth0_ai_langchain.auth0_ai import Auth0AI +from auth0_ai_langchain.async_authorization import get_async_authorization_credentials +from langchain_core.runnables import ensure_config +from langchain_core.tools import StructuredTool + +# If not provided, Auth0 settings will be read from env variables: `AUTH0_DOMAIN`, `AUTH0_CLIENT_ID`, and `AUTH0_CLIENT_SECRET` +auth0_ai = Auth0AI() + +with_async_authorization = auth0_ai.with_async_authorization( + scopes=["stock:trade"], + audience=os.getenv("AUDIENCE"), + binding_message=lambda ticker, qty: f"Authorize the purchase of {qty} {ticker}", + user_id=lambda *_, **__: ensure_config().get("configurable", {}).get("user_id"), + # Optional: + # store=InMemoryStore() +) + +def tool_function(ticker: str, qty: int) -> str: + credentials = get_async_authorization_credentials() + headers = { + "Authorization": f"{credentials["token_type"]} {credentials["access_token"]}", + # ... + } + # Call API + +trade_tool = with_async_authorization( + StructuredTool( + name="trade_tool", + description="Use this function to trade a stock", + func=trade_tool_function, + # ... + ) +) +``` + +2. Handle interruptions properly. For example, if user is not enrolled to MFA, it will throw an interruption. See [Handling Interrupts](#handling-interrupts) section. + +### Async Authorization with RAR (Rich Authorization Requests) + +`Auth0AI` supports RAR (Rich Authorization Requests) for CIBA. This allows you to provide additional authorization parameters to be displayed during the user confirmation request. + +When defining the tool authorizer, you can specify the `authorization_details` parameter to include detailed information about the authorization being requested: + +```python +with_async_authorization = auth0_ai.with_async_authorization( + scopes=["stock:trade"], + audience=os.getenv("AUDIENCE"), + binding_message=lambda ticker, qty: f"Authorize the purchase of {qty} {ticker}", + authorization_details=lambda ticker, qty: [ + { + "type": "trade_authorization", + "qty": qty, + "ticker": ticker, + "action": "buy" + } + ], + user_id=lambda *_, **__: ensure_config().get("configurable", {}).get("user_id"), + # Optional: + # store=InMemoryStore() +) +``` + +To use RAR with CIBA, you need to [set up authorization details](https://auth0.com/docs/get-started/apis/configure-rich-authorization-requests) in your Auth0 tenant. This includes defining the authorization request parameters and their types. Additionally, the [Guardian SDK](https://auth0.com/docs/secure/multi-factor-authentication/auth0-guardian) is required to handle these authorization details in your authorizer app. + +For more information on setting up RAR with CIBA, refer to: + +- [Configure Rich Authorization Requests (RAR)](https://auth0.com/docs/get-started/apis/configure-rich-authorization-requests) +- [User Authorization with CIBA](https://auth0.com/docs/get-started/authentication-and-authorization-flow/client-initiated-backchannel-authentication-flow/user-authorization-with-ciba) + +## Authorization for Tools + +The `FGAAuthorizer` can leverage Okta FGA to authorize tools executions. The `FGAAuthorizer.create` function can be used to create an authorizer that checks permissions before executing the tool. + +Full example of [Authorization for Tools](https://github.com/auth0-lab/auth0-ai-python/tree/main/examples/authorization-for-tools/langchain-examples). + +1. Create an instance of FGA Authorizer: + +```python +from auth0_ai_langchain.fga import FGAAuthorizer + +# If not provided, FGA settings will be read from env variables: `FGA_STORE_ID`, `FGA_CLIENT_ID`, `FGA_CLIENT_SECRET`, etc. +fga = FGAAuthorizer.create() +``` + +2. Define the FGA query (`build_query`) and, optionally, the `on_unauthorized` handler: + +```python +from langchain_core.runnables import ensure_config + +async def build_fga_query(tool_input): + user_id = ensure_config().get("configurable",{}).get("user_id") + return { + "user": f"user:{user_id}", + "object": f"asset:{tool_input["ticker"]}", + "relation": "can_buy", + "context": {"current_time": datetime.now(timezone.utc).isoformat()} + } + +def on_unauthorized(tool_input): + return f"The user is not allowed to buy {tool_input["qty"]} shares of {tool_input["ticker"]}." + +use_fga = fga( + build_query=build_fga_query, + on_unauthorized=on_unauthorized, +) +``` + +**Note**: The parameters given to the `build_query` and `on_unauthorized` functions are the same as those provided to the tool function. + +3. Wrap the tool: + +```python +from langchain_core.tools import StructuredTool + +async def buy_tool_function(ticker: str, qty: int) -> str: + # TODO: implement buy operation + return f"Purchased {qty} shares of {ticker}" + +func=use_fga(buy_tool_function) + +buy_tool = StructuredTool( + func=func, + coroutine=func, + name="buy", + description="Use this function to buy stocks", +) +``` + +## Calling APIs On User's Behalf + +The `Auth0AI.with_token_vault` function exchanges user's refresh token taken, by default, from the runnable configuration (`config.configurable._credentials.refresh_token`) for a Token Vault access token that is valid to call a third-party API. + +Full Example of [Calling APIs On User's Behalf](https://github.com/auth0-lab/auth0-ai-python/tree/main/examples/calling-apis/langchain-examples). + +1. Define a tool with the proper authorizer: + +```python +from auth0_ai_langchain.auth0_ai import Auth0AI +from auth0_ai_langchain.token_vault import get_credentials_from_token_vault +from langchain_core.tools import StructuredTool + +# If not provided, Auth0 settings will be read from env variables: `AUTH0_DOMAIN`, `AUTH0_CLIENT_ID`, and `AUTH0_CLIENT_SECRET` +auth0_ai = Auth0AI() + +with_google_calendar_access = auth0_ai.with_token_vault( + connection="google-oauth2", + scopes=["https://www.googleapis.com/auth/calendar.freebusy"], + # Optional: + # refresh_token=lambda *_, **__: ensure_config().get("configurable", {}).get("_credentials", {}).get("refresh_token"), + # store=InMemoryStore(), +) + +def tool_function(date: datetime): + credentials = get_credentials_from_token_vault() + # Call Google API using credentials["access_token"] + +check_calendar_tool = with_google_calendar_access( + StructuredTool( + name="check_user_calendar", + description="Use this function to check if the user is available on a certain date and time", + func=tool_function, + # ... + ) +) +``` + +2. Add a node to your graph for your tools: + +```python +workflow = ( + StateGraph(State) + .add_node( + "tools", + ToolNode( + [ + check_calendar_tool, + # ... + ], + # The error handler should be disabled to allow interruptions to be triggered from within tools. + handle_tool_errors=False + ) + ) + # ... +) +``` + +3. Handle interruptions properly. For example, if the tool does not have access to user's Google Calendar, it will throw an interruption. See [Handling Interrupts](#handling-interrupts) section. + +## RAG with FGA + +The `FGARetriever` can be used to filter documents based on access control checks defined in Okta FGA. This retriever performs batch checks on retrieved documents, returning only the ones that pass the specified access criteria. + +Full Example of [RAG Application](https://github.com/auth0-lab/auth0-ai-python/tree/main/examples/authorization-for-rag/langchain-examples). + +Create a retriever instance using the `FGARetriever` class. + +```python +from langchain.vectorstores import VectorStoreIndex +from langchain.schema import Document +from auth0_ai_langchain import FGARetriever +from openfga_sdk.client.models import ClientCheckRequest +from openfga_sdk import ClientConfiguration +from openfga_sdk.credentials import CredentialConfiguration, Credentials + +# Define some docs: +documents = [ + Document(page_content="This is a public doc", metadata={"doc_id": "public-doc"}), + Document(page_content="This is a private doc", metadata={"doc_id": "private-doc"}), +] + +# Create a vector store: +vector_store = VectorStoreIndex.from_documents(documents) + +# Create a retriever: +base_retriever = vector_store.as_retriever() + +# Create the FGA retriever wrapper. +# If not provided, FGA settings will be read from env variables: `FGA_STORE_ID`, `FGA_CLIENT_ID`, `FGA_CLIENT_SECRET`, etc. +retriever = FGARetriever( + base_retriever, + build_query=lambda node: ClientCheckRequest( + user=f'user:{user}', + object=f'doc:{node.metadata["doc_id"]}', + relation="viewer", + ) +) + +# Create a query engine: +query_engine = RetrieverQueryEngine.from_args( + retriever=retriever, + llm=OpenAI() +) + +# Query: +response = query_engine.query("What is the forecast for ZEKO?") + +print(response) +``` + +## Handling Interrupts + +`Auth0AI` uses interrupts extensively and will never block a graph. Whenever an authorizer requires user interaction, the graph throws a `GraphInterrupt` exception with data that allows the client to resume the flow. + +It is important to disable error handling in your tools node as follows: + +```python + .add_node( + "tools", + ToolNode( + [ + # your authorizer-wrapped tools + ], + # Error handler should be disabled in order to trigger interruptions from within tools. + handle_tool_errors=False + ) + ) +``` + +From the client side of the graph you get the interrupts: + +```python +from auth0_ai_langchain.utils.interrupt import get_auth0_interrupts + +# Get the langgraph thread: +thread = await client.threads.get(thread_id) + +# Filter the auth0 interrupts: +auth0_interrupts = get_auth0_interrupts(thread) +``` + +Then you can resume the thread by doing this: + +```python +await client.runs.wait(thread_id, assistant_id) +``` + +For the specific case of **CIBA (Client-Initiated Backchannel Authorization)** you might attach a `GraphResumer` instance that watches for interrupted threads in the `"Authorization Pending"` state and attempts to resume them automatically, respecting Auth0's polling interval. + +```python +import os +from auth0_ai_langchain.async_authorization import GraphResumer +from langgraph_sdk import get_client + +resumer = GraphResumer( + lang_graph=get_client(url=os.getenv("LANGGRAPH_API_URL")), + # optionally, you can filter by a specific graph: + filters={"graph_id": "conditional-trade"}, +) + +resumer \ + .on_resume(lambda thread: print(f"Attempting to resume thread {thread['thread_id']} from interruption {thread['interruption_id']}")) \ + .on_error(lambda err: print(f"Error in GraphResumer: {str(err)}")) + +resumer.start() +``` + +--- + +

+ + + + Auth0 Logo + +

+

Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout Why Auth0?

+

+This project is licensed under the Apache 2.0 license. See the LICENSE file for more info.

diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/FGARetriever.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/FGARetriever.py new file mode 100644 index 0000000..1a1f806 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/FGARetriever.py @@ -0,0 +1,158 @@ +import os + +from typing import Callable, Optional +from langchain_core.retrievers import BaseRetriever +from langchain_core.documents import Document +from openfga_sdk.client.client import ClientBatchCheckRequest +from pydantic import PrivateAttr +from openfga_sdk import ClientConfiguration, OpenFgaClient +from openfga_sdk.client.models import ClientBatchCheckItem +from openfga_sdk.sync import OpenFgaClient as OpenFgaClientSync +from openfga_sdk.credentials import CredentialConfiguration, Credentials + + +class FGARetriever(BaseRetriever): + """ + FGARetriever integrates with OpenFGA to filter documents based on fine-grained authorization (FGA). + """ + + _retriever: BaseRetriever = PrivateAttr() + _fga_configuration: ClientConfiguration = PrivateAttr() + _query_builder: Callable[[Document], ClientBatchCheckItem] = PrivateAttr() + + def __init__( + self, + retriever: BaseRetriever, + build_query: Callable[[Document], ClientBatchCheckItem], + fga_configuration: Optional[ClientConfiguration] = None, + ): + """ + Initialize the FGARetriever with the specified retriever, query builder, and configuration. + + Args: + retriever (BaseRetriever): The retriever used to fetch documents. + build_query (Callable[[Document], ClientBatchCheckItem]): Function to convert documents into FGA queries. + fga_configuration (ClientConfiguration, optional): Configuration for the OpenFGA client. If not provided, defaults to environment variables. + """ + super().__init__() + self._retriever = retriever + self._fga_configuration = fga_configuration or ClientConfiguration( + api_url=os.getenv("FGA_API_URL") or "https://api.us1.fga.dev", + store_id=os.getenv("FGA_STORE_ID"), + credentials=Credentials( + method="client_credentials", + configuration=CredentialConfiguration( + api_issuer=os.getenv("FGA_API_TOKEN_ISSUER") or "auth.fga.dev", + api_audience=os.getenv("FGA_API_AUDIENCE") + or "https://api.us1.fga.dev/", + client_id=os.getenv("FGA_CLIENT_ID"), + client_secret=os.getenv("FGA_CLIENT_SECRET"), + ), + ), + ) + self._query_builder = build_query + + async def _async_filter_FGA(self, docs: list[Document]) -> list[Document]: + """ + Asynchronously filter documents using OpenFGA. + + Args: + docs (List[Document]): List of documents to filter. + + Returns: + List[Document]: Filtered list of documents authorized by FGA. + """ + async with OpenFgaClient(self._fga_configuration) as fga_client: + all_checks = [self._query_builder(doc) for doc in docs] + unique_checks = list( + { + (check.relation, check.object, check.user): check + for check in all_checks + }.values() + ) + + doc_to_obj = {doc: check.object for check, doc in zip(all_checks, docs)} + + fga_response = await fga_client.batch_check( + ClientBatchCheckRequest(checks=unique_checks) + ) + await fga_client.close() + + permissions_map = { + result.request.object: result.allowed for result in fga_response.result + } + + return [ + doc + for doc in docs + if doc_to_obj[doc] in permissions_map + and permissions_map[doc_to_obj[doc]] + ] + + async def _aget_relevant_documents(self, query, *, run_manager) -> list[Document]: + """ + Asynchronously retrieve relevant documents from the base retrieve and filter them using FGA. + + Args: + query (str): The query for retrieving documents. + run_manager (object, optional): Optional manager for tracking runs. + + Returns: + List[Document]: Filtered and relevant documents. + """ + docs = await self._retriever._aget_relevant_documents( + query, run_manager=run_manager + ) + docs = await self._async_filter_FGA(docs) + return docs + + def _filter_FGA(self, docs: list[Document]) -> list[Document]: + """ + Synchronously filter documents using OpenFGA. + + Args: + docs (List[Document]): List of documents to filter. + + Returns: + List[Document]: Filtered list of documents authorized by FGA. + """ + with OpenFgaClientSync(self._fga_configuration) as fga_client: + all_checks = [self._query_builder(doc) for doc in docs] + unique_checks = list( + { + (check.relation, check.object, check.user): check + for check in all_checks + }.values() + ) + + doc_to_obj = {doc.id: check.object for check, doc in zip(all_checks, docs)} + + fga_response = fga_client.batch_check( + ClientBatchCheckRequest(checks=unique_checks) + ) + + permissions_map = { + result.request.object: result.allowed for result in fga_response.result + } + + return [ + doc + for doc in docs + if doc_to_obj[doc.id] in permissions_map + and permissions_map[doc_to_obj[doc.id]] + ] + + def _get_relevant_documents(self, query, *, run_manager) -> list[Document]: + """ + Retrieve relevant documents and filter them using FGA. + + Args: + query (str): The query for retrieving documents. + run_manager (object, optional): Optional manager for tracking runs. + + Returns: + List[Document]: Filtered and relevant documents. + """ + docs = self._retriever._get_relevant_documents(query, run_manager=run_manager) + docs = self._filter_FGA(docs) + return docs diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/__init__.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/__init__.py new file mode 100644 index 0000000..c120a24 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/__init__.py @@ -0,0 +1,3 @@ +from .FGARetriever import FGARetriever + +__all__ = ["FGARetriever"] diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/__init__.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/__init__.py new file mode 100644 index 0000000..af62cf2 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/__init__.py @@ -0,0 +1,3 @@ +from auth0_ai.authorizers.async_authorization.async_authorizer_base import get_async_authorization_credentials as get_async_authorization_credentials +from auth0_ai_langchain.async_authorization.async_authorizer import AsyncAuthorizer as AsyncAuthorizer +from auth0_ai_langchain.async_authorization.graph_resumer import GraphResumer as GraphResumer \ No newline at end of file diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/async_authorizer.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/async_authorizer.py new file mode 100644 index 0000000..e1f23f6 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/async_authorizer.py @@ -0,0 +1,17 @@ +from abc import ABC +from typing import Union +from auth0_ai.authorizers.async_authorization import AsyncAuthorizerBase +from auth0_ai.interrupts.async_authorization_interrupts import AuthorizationPendingInterrupt, AuthorizationPollingInterrupt +from auth0_ai_langchain.utils.interrupt import to_graph_interrupt +from auth0_ai_langchain.utils.tool_wrapper import tool_wrapper +from langchain_core.tools import BaseTool + +class AsyncAuthorizer(AsyncAuthorizerBase, ABC): + def _handle_authorization_interrupts(self, err: Union[AuthorizationPendingInterrupt, AuthorizationPollingInterrupt]) -> None: + raise to_graph_interrupt(err) + + def authorizer(self): + def wrap_tool(tool: BaseTool) -> BaseTool: + return tool_wrapper(tool, self.protect) + + return wrap_tool diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/graph_resumer.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/graph_resumer.py new file mode 100644 index 0000000..8ac4e46 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/async_authorization/graph_resumer.py @@ -0,0 +1,154 @@ +import asyncio +from threading import Event +from typing import Callable, Optional, Dict, Any, List, TypedDict +from auth0_ai.authorizers.async_authorization import AsyncAuthorizationRequest +from auth0_ai.interrupts.async_authorization_interrupts import AsyncAuthorizationInterrupt, AuthorizationPendingInterrupt, AuthorizationPollingInterrupt +from auth0_ai_langchain.utils.interrupt import get_auth0_interrupts +from langgraph_sdk.client import LangGraphClient +from langgraph_sdk.schema import Thread, Interrupt + +class WatchedThread(TypedDict): + thread_id: str + assistant_id: str + interruption_id: str + auth_request: AsyncAuthorizationRequest + config: Dict[str, Any] + last_run: float + +class GraphResumerFilters(TypedDict): + graph_id: str + +class GraphResumer: + def __init__(self, lang_graph: LangGraphClient, filters: Optional[GraphResumerFilters] = None): + self.lang_graph = lang_graph + self.filters = filters or {} + self.map: Dict[str, WatchedThread] = {} + self._stop_event = Event() + self._loop_task: Optional[asyncio.Task] = None + + # Event callbacks + self._resume_callbacks: List[Callable[[WatchedThread], None]] = [] + self._error_callbacks: List[Callable[[Exception], None]] = [] + + # Public API to register event callbacks + def on_resume(self, callback: Callable[[WatchedThread], None]) -> "GraphResumer": + self._resume_callbacks.append(callback) + return self + + def on_error(self, callback: Callable[[Exception], None]) -> "GraphResumer": + self._error_callbacks.append(callback) + return self + + def _emit_resume(self, thread: WatchedThread) -> None: + for callback in self._resume_callbacks: + callback(thread) + + def _emit_error(self, error: Exception) -> None: + for callback in self._error_callbacks: + callback(error) + + async def _get_all_interrupted_threads(self) -> List[Thread]: + interrupted_threads: List[Thread] = [] + offset = 0 + + while True: + page = await self.lang_graph.threads.search( + status="interrupted", + limit=100, + offset=offset, + metadata={"graph_id": self.filters["graph_id"]} if "graph_id" in self.filters else None + ) + + if not page: + break + + for t in page: + interrupt = self._get_first_interrupt(t) + if interrupt and AsyncAuthorizationInterrupt.is_interrupt(interrupt["value"]) and AsyncAuthorizationInterrupt.has_request_data(interrupt["value"]): + interrupted_threads.append(t) + + offset += len(page) + if len(page) < 100: + break + + return interrupted_threads + + def _get_first_interrupt(self, thread: Thread) -> Optional[Interrupt]: + interrupts = thread["interrupts"] + if interrupts: + values = list(interrupts.values()) + if values and values[0]: + return values[0][0] + return None + + def _get_hash_map_id(self, thread: Thread) -> str: + return f"{thread['thread_id']}:{next(iter(thread['interrupts']))}" + + async def _resume_thread(self, t: WatchedThread): + self._emit_resume(t) + + await self.lang_graph.runs.wait(t["thread_id"], t["assistant_id"], config=t["config"]) + + t["last_run"] = asyncio.get_event_loop().time() * 1000 + + async def loop(self): + all_threads = await self._get_all_interrupted_threads() + + # Remove old interrupted threads + active_keys = {self._get_hash_map_id(t) for t in all_threads} + + for key in list(self.map.keys()): + if key not in active_keys: + del self.map[key] + + # Add new interrupted threads + for thread in all_threads: + interrupt = next( + (i for i in get_auth0_interrupts(thread) + if AuthorizationPendingInterrupt.is_interrupt(i["value"]) + or AuthorizationPollingInterrupt.is_interrupt(i["value"])), + None + ) + + if not interrupt or not interrupt["value"].get("_request"): + continue + + key = self._get_hash_map_id(thread) + if key not in self.map: + self.map[key] = { + "thread_id": thread["thread_id"], + "assistant_id": thread["metadata"].get("graph_id"), + "config": getattr(thread, "config", {}), + "interruption_id": next(iter(thread["interrupts"])), + "auth_request": interrupt["value"]["_request"], + } + + threads_to_resume = [ + t for t in self.map.values() + if "last_run" not in t or (t["last_run"] + t["auth_request"]["interval"] * 1000 < asyncio.get_event_loop().time() * 1000) + ] + + await asyncio.gather(*[ + self._resume_thread(t) for t in threads_to_resume + ]) + + def start(self): + if self._loop_task and not self._loop_task.done(): + return + + self._stop_event.clear() + + async def _run_loop(): + while not self._stop_event.is_set(): + try: + await self.loop() + except Exception as e: + self._emit_error(e) + await asyncio.sleep(5) + + self._loop_task = asyncio.create_task(_run_loop()) + + def stop(self): + self._stop_event.set() + if self._loop_task: + self._loop_task.cancel() diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/auth0_ai.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/auth0_ai.py new file mode 100644 index 0000000..1ee5120 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/auth0_ai.py @@ -0,0 +1,113 @@ +from typing import Callable, Optional +from langchain_core.tools import BaseTool +from auth0_ai.authorizers.async_authorization import AsyncAuthorizerParams +from auth0_ai.authorizers.token_vault_authorizer import TokenVaultAuthorizerParams +from auth0_ai.authorizers.types import Auth0ClientParams +from auth0_ai_langchain.async_authorization.async_authorizer import AsyncAuthorizer +from auth0_ai_langchain.token_vault.token_vault_authorizer import TokenVaultAuthorizer + + +class Auth0AI: + """Provides decorators to secure LangChain tools using Auth0 authorization flows. + """ + + def __init__(self, auth0: Optional[Auth0ClientParams] = None): + """Initializes the Auth0AI instance. + + Args: + auth0 (Optional[Auth0ClientParams]): Parameters for the Auth0 client. + If not provided, values will be automatically read from environment + variables: `AUTH0_DOMAIN`, `AUTH0_CLIENT_ID`, and `AUTH0_CLIENT_SECRET`. + """ + self.auth0 = auth0 + + def with_async_authorization(self, **params: AsyncAuthorizerParams) -> Callable[[BaseTool], BaseTool]: + """Protects a tool with the CIBA (Client-Initiated Backchannel Authentication) flow. + + Requires user confirmation via a second device (e.g., phone) + before allowing the tool to execute. + + Args: + **params: Parameters defined in `AsyncAuthorizerParams`. + + Returns: + Callable[[BaseTool], BaseTool]: A decorator to wrap a LangChain tool. + + Example: + ```python + import os + from auth0_ai_langchain.auth0_ai import Auth0AI + from auth0_ai_langchain.async_authorization import get_async_authorization_credentials + from langchain_core.runnables import ensure_config + from langchain_core.tools import StructuredTool + + auth0_ai = Auth0AI() + + with_async_authorization = auth0_ai.with_async_authorization( + scopes=["stock:trade"], + audience=os.getenv("AUDIENCE"), + binding_message=lambda ticker, qty: f"Authorize the purchase of {qty} {ticker}", + user_id=lambda *_, **__: ensure_config().get("configurable", {}).get("user_id") + ) + + def tool_function(ticker: str, qty: int) -> str: + credentials = get_async_authorization_credentials() + headers = { + "Authorization": f"{credentials['token_type']} {credentials['access_token']}", + # ... + } + # Call API + + trade_tool = with_async_authorization( + StructuredTool( + name="trade_tool", + description="Use this function to trade a stock", + func=tool_function, + ) + ) + ``` + """ + authorizer = AsyncAuthorizer(AsyncAuthorizerParams(**params), self.auth0) + return authorizer.authorizer() + + def with_token_vault(self, **params: TokenVaultAuthorizerParams) -> Callable[[BaseTool], BaseTool]: + """Enables a tool to obtain an access token from a Token Vault identity provider (e.g., Google, Azure AD). + + The token can then be used within the tool to call third-party APIs on behalf of the user. + + Args: + **params: Parameters defined in `TokenVaultAuthorizerParams`. + + Returns: + Callable[[BaseTool], BaseTool]: A decorator to wrap a LangChain tool. + + Example: + ```python + from auth0_ai_langchain.auth0_ai import Auth0AI + from auth0_ai_langchain.token_vault import get_credentials_from_token_vault + from langchain_core.tools import StructuredTool + from datetime import datetime + + auth0_ai = Auth0AI() + + with_google_calendar_access = auth0_ai.with_token_vault( + connection="google-oauth2", + scopes=["https://www.googleapis.com/auth/calendar.freebusy"] + ) + + def tool_function(date: datetime): + credentials = get_credentials_from_token_vault() + # Call Google API using credentials["access_token"] + + check_calendar_tool = with_google_calendar_access( + StructuredTool( + name="check_user_calendar", + description="Use this function to check if the user is available on a certain date and time", + func=tool_function, + ) + ) + ``` + """ + authorizer = TokenVaultAuthorizer( + TokenVaultAuthorizerParams(**params), self.auth0) + return authorizer.authorizer() diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/fga/__init__.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/fga/__init__.py new file mode 100644 index 0000000..806f5b1 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/fga/__init__.py @@ -0,0 +1,4 @@ +from auth0_ai.authorizers.fga_authorizer import ( + FGAAuthorizer as FGAAuthorizer, + FGAAuthorizerOptions as FGAAuthorizerOptions +) diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/__init__.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/__init__.py new file mode 100644 index 0000000..36c3814 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/__init__.py @@ -0,0 +1,10 @@ +from auth0_ai.interrupts.token_vault_interrupt import ( + TokenVaultError as TokenVaultError, + TokenVaultInterrupt as TokenVaultInterrupt +) + +from auth0_ai.authorizers.token_vault_authorizer import ( + get_credentials_from_token_vault as get_credentials_from_token_vault, + get_access_token_from_token_vault as get_access_token_from_token_vault +) +from .token_vault_authorizer import TokenVaultAuthorizer as TokenVaultAuthorizer diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/token_vault_authorizer.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/token_vault_authorizer.py new file mode 100644 index 0000000..c71f093 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/token_vault/token_vault_authorizer.py @@ -0,0 +1,38 @@ +import copy +from abc import ABC +from auth0_ai.authorizers.token_vault_authorizer import TokenVaultAuthorizerBase, \ + TokenVaultAuthorizerParams +from auth0_ai.authorizers.types import Auth0ClientParams +from auth0_ai.interrupts.token_vault_interrupt import TokenVaultInterrupt +from auth0_ai_langchain.utils.interrupt import to_graph_interrupt +from auth0_ai_langchain.utils.tool_wrapper import tool_wrapper +from langchain_core.tools import BaseTool +from langchain_core.runnables import ensure_config + + +async def default_get_refresh_token(*_, **__) -> str | None: + return ensure_config().get("configurable", {}).get("_credentials", {}).get("refresh_token") + +class TokenVaultAuthorizer(TokenVaultAuthorizerBase, ABC): + def __init__( + self, + params: TokenVaultAuthorizerParams, + auth0: Auth0ClientParams = None, + ): + missing_refresh = params.refresh_token.value is None + missing_access_token = params.access_token.value is None + + if missing_refresh and missing_access_token and callable(default_get_refresh_token): + params = copy.copy(params) + params.refresh_token.value = default_get_refresh_token + + super().__init__(params, auth0) + + def _handle_authorization_interrupts(self, err: TokenVaultInterrupt) -> None: + raise to_graph_interrupt(err) + + def authorizer(self): + def wrap_tool(tool: BaseTool) -> BaseTool: + return tool_wrapper(tool, self.protect) + + return wrap_tool diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/interrupt.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/interrupt.py new file mode 100644 index 0000000..7d38a94 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/interrupt.py @@ -0,0 +1,30 @@ +from typing import List +from auth0_ai.interrupts.auth0_interrupt import Auth0Interrupt +from langgraph.errors import GraphInterrupt +from langgraph.types import Interrupt +from langgraph_sdk.schema import Thread + + +def to_graph_interrupt(interrupt: Auth0Interrupt) -> GraphInterrupt: + return GraphInterrupt([ + Interrupt( + value=interrupt.to_json(), + when="during", + resumable=True, + ns=[f"auth0AI:{interrupt.name}:{interrupt.code}"] + ) + ]) + + +def get_auth0_interrupts(thread: Thread) -> List[Interrupt]: + result = [] + + if "interrupts" not in thread: + return result + + for interrupt_list in thread["interrupts"].values(): + for interrupt in interrupt_list: + if Auth0Interrupt.is_interrupt(interrupt["value"]): + result.append(interrupt) + + return result diff --git a/temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/tool_wrapper.py b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/tool_wrapper.py new file mode 100644 index 0000000..e6b1c9c --- /dev/null +++ b/temp-packages/auth0-ai-langchain/auth0_ai_langchain/utils/tool_wrapper.py @@ -0,0 +1,34 @@ +from typing import Callable +from typing_extensions import Annotated +from pydantic import create_model +from langchain_core.tools import BaseTool, tool as create_tool, InjectedToolCallId +from langchain_core.runnables import RunnableConfig + +def tool_wrapper(tool: BaseTool, protect_fn: Callable) -> BaseTool: + + # Workaround: extend existing args_schema to be able to get the tool_call_id value + args_schema = create_model( + tool.args_schema.__name__ + "Extended", + __base__=tool.args_schema, + **{"tool_call_id": (Annotated[str, InjectedToolCallId])} + ) + + @create_tool( + tool.name, + description=tool.description, + args_schema=args_schema + ) + async def wrapped_tool(config: RunnableConfig, tool_call_id: Annotated[str, InjectedToolCallId], **input): + async def execute_fn(*_, **__): + return await tool.ainvoke(input, config) + + return await protect_fn( + lambda *_, **__: { + "thread_id": config.get("configurable", {}).get("thread_id"), + "tool_call_id": tool_call_id, + "tool_name": tool.name, + }, + execute_fn, + )(**input) + + return wrapped_tool diff --git a/temp-packages/auth0-ai-langchain/poetry.lock b/temp-packages/auth0-ai-langchain/poetry.lock new file mode 100644 index 0000000..c6ec3b0 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/poetry.lock @@ -0,0 +1,2844 @@ +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, + {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, +] + +[[package]] +name = "aiohttp" +version = "3.11.18" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4"}, + {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6"}, + {file = "aiohttp-3.11.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868"}, + {file = "aiohttp-3.11.18-cp310-cp310-win32.whl", hash = "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f"}, + {file = "aiohttp-3.11.18-cp310-cp310-win_amd64.whl", hash = "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd"}, + {file = "aiohttp-3.11.18-cp311-cp311-win32.whl", hash = "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d"}, + {file = "aiohttp-3.11.18-cp311-cp311-win_amd64.whl", hash = "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea"}, + {file = "aiohttp-3.11.18-cp312-cp312-win32.whl", hash = "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8"}, + {file = "aiohttp-3.11.18-cp312-cp312-win_amd64.whl", hash = "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7"}, + {file = "aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78"}, + {file = "aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935"}, + {file = "aiohttp-3.11.18-cp39-cp39-win32.whl", hash = "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc"}, + {file = "aiohttp-3.11.18-cp39-cp39-win_amd64.whl", hash = "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef"}, + {file = "aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" +aiosignal = ">=1.1.2" +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] + +[[package]] +name = "aiosignal" +version = "1.3.2" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.9.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "attrs" +version = "25.3.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] + +[package.extras] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] + +[[package]] +name = "auth0-ai" +version = "1.0.0b3" +description = "This package provides base abstractions for authentication and authorization in AI applications." +optional = false +python-versions = "^3.11" +groups = ["main"] +files = [] +develop = true + +[package.dependencies] +auth0-python = "^4.13.0" +openfga-sdk = "^0.9.5" + +[package.source] +type = "directory" +url = "../auth0-ai" + +[[package]] +name = "auth0-python" +version = "4.13.0" +description = "" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "auth0_python-4.13.0-py3-none-any.whl", hash = "sha256:8e3266fcfc2e3cc4f477e01f964c0a6c9a3563653a2feb226355bc825cd4932c"}, + {file = "auth0_python-4.13.0.tar.gz", hash = "sha256:72f58bd26b078e3b493e4d24928cc75fa41842aae35cef488ed6f8db0fb701fb"}, +] + +[package.dependencies] +aiohttp = ">=3.10.11" +cryptography = ">=43.0.1" +pyjwt = ">=2.8.0" +requests = ">=2.32.3" +urllib3 = ">=2.2.3" + +[[package]] +name = "backports-tarfile" +version = "1.2.0" +description = "Backport of CPython tarfile module" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version == \"3.11\"" +files = [ + {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, + {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test", "pytest (!=8.0.*)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)"] + +[[package]] +name = "build" +version = "1.2.2.post1" +description = "A simple, correct Python build frontend" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, + {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "os_name == \"nt\""} +packaging = ">=19.1" +pyproject_hooks = "*" + +[package.extras] +docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] +test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0) ; python_version < \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.11\"", "setuptools (>=67.8.0) ; python_version >= \"3.12\"", "wheel (>=0.36.0)"] +typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] +uv = ["uv (>=0.1.18)"] +virtualenv = ["virtualenv (>=20.0.35)"] + +[[package]] +name = "certifi" +version = "2025.4.26" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\""} + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "test"] +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +markers = {main = "os_name == \"nt\"", test = "sys_platform == \"win32\""} + +[[package]] +name = "cryptography" +version = "44.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.7" +groups = ["main", "dev"] +files = [ + {file = "cryptography-44.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:962bc30480a08d133e631e8dfd4783ab71cc9e33d5d7c1e192f0b7c06397bb88"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc61e8f3bf5b60346d89cd3d37231019c17a081208dfbbd6e1605ba03fa137"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58968d331425a6f9eedcee087f77fd3c927c88f55368f43ff7e0a19891f2642c"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e28d62e59a4dbd1d22e747f57d4f00c459af22181f0b2f787ea83f5a876d7c76"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af653022a0c25ef2e3ffb2c673a50e5a0d02fecc41608f4954176f1933b12359"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:157f1f3b8d941c2bd8f3ffee0af9b049c9665c39d3da9db2dc338feca5e98a43"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:c6cd67722619e4d55fdb42ead64ed8843d64638e9c07f4011163e46bc512cf01"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b424563394c369a804ecbee9b06dfb34997f19d00b3518e39f83a5642618397d"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c91fc8e8fd78af553f98bc7f2a1d8db977334e4eea302a4bfd75b9461c2d8904"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:25cd194c39fa5a0aa4169125ee27d1172097857b27109a45fadc59653ec06f44"}, + {file = "cryptography-44.0.3-cp37-abi3-win32.whl", hash = "sha256:3be3f649d91cb182c3a6bd336de8b61a0a71965bd13d1a04a0e15b39c3d5809d"}, + {file = "cryptography-44.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:3883076d5c4cc56dbef0b898a74eb6992fdac29a7b9013870b34efe4ddb39a0d"}, + {file = "cryptography-44.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:5639c2b16764c6f76eedf722dbad9a0914960d3489c0cc38694ddf9464f1bb2f"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ffef566ac88f75967d7abd852ed5f182da252d23fac11b4766da3957766759"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:192ed30fac1728f7587c6f4613c29c584abdc565d7417c13904708db10206645"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7d5fe7195c27c32a64955740b949070f21cba664604291c298518d2e255931d2"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3f07943aa4d7dad689e3bb1638ddc4944cc5e0921e3c227486daae0e31a05e54"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb90f60e03d563ca2445099edf605c16ed1d5b15182d21831f58460c48bffb93"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ab0b005721cc0039e885ac3503825661bd9810b15d4f374e473f8c89b7d5460c"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3bb0847e6363c037df8f6ede57d88eaf3410ca2267fb12275370a76f85786a6f"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0cc66c74c797e1db750aaa842ad5b8b78e14805a9b5d1348dc603612d3e3ff5"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6866df152b581f9429020320e5eb9794c8780e90f7ccb021940d7f50ee00ae0b"}, + {file = "cryptography-44.0.3-cp39-abi3-win32.whl", hash = "sha256:c138abae3a12a94c75c10499f1cbae81294a6f983b3af066390adee73f433028"}, + {file = "cryptography-44.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:5d186f32e52e66994dce4f766884bcb9c68b8da62d61d9d215bfe5fb56d21334"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cad399780053fb383dc067475135e41c9fe7d901a97dd5d9c5dfb5611afc0d7d"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:21a83f6f35b9cc656d71b5de8d519f566df01e660ac2578805ab245ffd8523f8"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fc3c9babc1e1faefd62704bb46a69f359a9819eb0292e40df3fb6e3574715cd4"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:e909df4053064a97f1e6565153ff8bb389af12c5c8d29c343308760890560aff"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:dad80b45c22e05b259e33ddd458e9e2ba099c86ccf4e88db7bbab4b747b18d06"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:479d92908277bed6e1a1c69b277734a7771c2b78633c224445b5c60a9f4bc1d9"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:896530bc9107b226f265effa7ef3f21270f18a2026bc09fed1ebd7b66ddf6375"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9b4d4a5dbee05a2c390bf212e78b99434efec37b17a4bff42f50285c5c8c9647"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02f55fb4f8b79c1221b0961488eaae21015b69b210e18c386b69de182ebb1259"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dd3db61b8fe5be220eee484a17233287d0be6932d056cf5738225b9c05ef4fff"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:978631ec51a6bbc0b7e58f23b68a8ce9e5f09721940933e9c217068388789fe5"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5d20cc348cca3a8aa7312f42ab953a56e15323800ca3ab0706b8cd452a3a056c"}, + {file = "cryptography-44.0.3.tar.gz", hash = "sha256:fe19d8bc5536a91a24a8133328880a41831b6c5df54599a8417b62fe015d3053"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\""} + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0) ; python_version >= \"3.8\""] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2) ; python_version >= \"3.8\""] +pep8test = ["check-sdist ; python_version >= \"3.8\"", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +sdist = ["build (>=1.0.0)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "deprecated" +version = "1.2.18" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +files = [ + {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, + {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] + +[[package]] +name = "docutils" +version = "0.21.2" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, +] + +[[package]] +name = "frozenlist" +version = "1.6.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3"}, + {file = "frozenlist-1.6.0-cp310-cp310-win32.whl", hash = "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812"}, + {file = "frozenlist-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e"}, + {file = "frozenlist-1.6.0-cp311-cp311-win32.whl", hash = "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860"}, + {file = "frozenlist-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770"}, + {file = "frozenlist-1.6.0-cp312-cp312-win32.whl", hash = "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc"}, + {file = "frozenlist-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e"}, + {file = "frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4"}, + {file = "frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497"}, + {file = "frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f"}, + {file = "frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c"}, + {file = "frozenlist-1.6.0-cp39-cp39-win32.whl", hash = "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530"}, + {file = "frozenlist-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572"}, + {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, + {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, +] + +[[package]] +name = "greenlet" +version = "3.2.1" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" +files = [ + {file = "greenlet-3.2.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:777c1281aa7c786738683e302db0f55eb4b0077c20f1dc53db8852ffaea0a6b0"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3059c6f286b53ea4711745146ffe5a5c5ff801f62f6c56949446e0f6461f8157"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e1a40a17e2c7348f5eee5d8e1b4fa6a937f0587eba89411885a36a8e1fc29bd2"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5193135b3a8d0017cb438de0d49e92bf2f6c1c770331d24aa7500866f4db4017"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:639a94d001fe874675b553f28a9d44faed90f9864dc57ba0afef3f8d76a18b04"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fe303381e7e909e42fb23e191fc69659910909fdcd056b92f6473f80ef18543"}, + {file = "greenlet-3.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:72c9b668454e816b5ece25daac1a42c94d1c116d5401399a11b77ce8d883110c"}, + {file = "greenlet-3.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6079ae990bbf944cf66bea64a09dcb56085815630955109ffa98984810d71565"}, + {file = "greenlet-3.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e63cd2035f49376a23611fbb1643f78f8246e9d4dfd607534ec81b175ce582c2"}, + {file = "greenlet-3.2.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:aa30066fd6862e1153eaae9b51b449a6356dcdb505169647f69e6ce315b9468b"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b0f3a0a67786facf3b907a25db80efe74310f9d63cc30869e49c79ee3fcef7e"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64a4d0052de53ab3ad83ba86de5ada6aeea8f099b4e6c9ccce70fb29bc02c6a2"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852ef432919830022f71a040ff7ba3f25ceb9fe8f3ab784befd747856ee58530"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4818116e75a0dd52cdcf40ca4b419e8ce5cb6669630cb4f13a6c384307c9543f"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9afa05fe6557bce1642d8131f87ae9462e2a8e8c46f7ed7929360616088a3975"}, + {file = "greenlet-3.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5c12f0d17a88664757e81a6e3fc7c2452568cf460a2f8fb44f90536b2614000b"}, + {file = "greenlet-3.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbb4e1aa2000852937dd8f4357fb73e3911da426df8ca9b8df5db231922da474"}, + {file = "greenlet-3.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:cb5ee928ce5fedf9a4b0ccdc547f7887136c4af6109d8f2fe8e00f90c0db47f5"}, + {file = "greenlet-3.2.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:0ba2811509a30e5f943be048895a983a8daf0b9aa0ac0ead526dfb5d987d80ea"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4245246e72352b150a1588d43ddc8ab5e306bef924c26571aafafa5d1aaae4e8"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7abc0545d8e880779f0c7ce665a1afc3f72f0ca0d5815e2b006cafc4c1cc5840"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6dcc6d604a6575c6225ac0da39df9335cc0c6ac50725063fa90f104f3dbdb2c9"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2273586879affca2d1f414709bb1f61f0770adcabf9eda8ef48fd90b36f15d12"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ff38c869ed30fff07f1452d9a204ece1ec6d3c0870e0ba6e478ce7c1515acf22"}, + {file = "greenlet-3.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e934591a7a4084fa10ee5ef50eb9d2ac8c4075d5c9cf91128116b5dca49d43b1"}, + {file = "greenlet-3.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:063bcf7f8ee28eb91e7f7a8148c65a43b73fbdc0064ab693e024b5a940070145"}, + {file = "greenlet-3.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7132e024ebeeeabbe661cf8878aac5d2e643975c4feae833142592ec2f03263d"}, + {file = "greenlet-3.2.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:e1967882f0c42eaf42282a87579685c8673c51153b845fde1ee81be720ae27ac"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e77ae69032a95640a5fe8c857ec7bee569a0997e809570f4c92048691ce4b437"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3227c6ec1149d4520bc99edac3b9bc8358d0034825f3ca7572165cb502d8f29a"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ddda0197c5b46eedb5628d33dad034c455ae77708c7bf192686e760e26d6a0c"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de62b542e5dcf0b6116c310dec17b82bb06ef2ceb696156ff7bf74a7a498d982"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c07a0c01010df42f1f058b3973decc69c4d82e036a951c3deaf89ab114054c07"}, + {file = "greenlet-3.2.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2530bfb0abcd451ea81068e6d0a1aac6dabf3f4c23c8bd8e2a8f579c2dd60d95"}, + {file = "greenlet-3.2.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c472adfca310f849903295c351d297559462067f618944ce2650a1878b84123"}, + {file = "greenlet-3.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:24a496479bc8bd01c39aa6516a43c717b4cee7196573c47b1f8e1011f7c12495"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:175d583f7d5ee57845591fc30d852b75b144eb44b05f38b67966ed6df05c8526"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ecc9d33ca9428e4536ea53e79d781792cee114d2fa2695b173092bdbd8cd6d5"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f56382ac4df3860ebed8ed838f268f03ddf4e459b954415534130062b16bc32"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc45a7189c91c0f89aaf9d69da428ce8301b0fd66c914a499199cfb0c28420fc"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51a2f49da08cff79ee42eb22f1658a2aed60c72792f0a0a95f5f0ca6d101b1fb"}, + {file = "greenlet-3.2.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:0c68bbc639359493420282d2f34fa114e992a8724481d700da0b10d10a7611b8"}, + {file = "greenlet-3.2.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:e775176b5c203a1fa4be19f91da00fd3bff536868b77b237da3f4daa5971ae5d"}, + {file = "greenlet-3.2.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d6668caf15f181c1b82fb6406f3911696975cc4c37d782e19cb7ba499e556189"}, + {file = "greenlet-3.2.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:17964c246d4f6e1327edd95e2008988a8995ae3a7732be2f9fc1efed1f1cdf8c"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b4ec7f65f0e4a1500ac475c9343f6cc022b2363ebfb6e94f416085e40dea15"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b38d53cf268da963869aa25a6e4cc84c1c69afc1ae3391738b2603d110749d01"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a7490f74e8aabc5f29256765a99577ffde979920a2db1f3676d265a3adba41"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4339b202ac20a89ccd5bde0663b4d00dc62dd25cb3fb14f7f3034dec1b0d9ece"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a750f1046994b9e038b45ae237d68153c29a3a783075211fb1414a180c8324b"}, + {file = "greenlet-3.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:374ffebaa5fbd10919cd599e5cf8ee18bae70c11f9d61e73db79826c8c93d6f9"}, + {file = "greenlet-3.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b89e5d44f55372efc6072f59ced5ed1efb7b44213dab5ad7e0caba0232c6545"}, + {file = "greenlet-3.2.1-cp39-cp39-win32.whl", hash = "sha256:b7503d6b8bbdac6bbacf5a8c094f18eab7553481a1830975799042f26c9e101b"}, + {file = "greenlet-3.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:e98328b8b8f160925d6b1c5b1879d8e64f6bd8cf11472b7127d579da575b77d9"}, + {file = "greenlet-3.2.1.tar.gz", hash = "sha256:9f4dd4b4946b14bb3bf038f81e1d2e535b7d94f1b2a59fdba1293cd9c1a0a4d7"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "id" +version = "1.5.0" +description = "A tool for generating OIDC identities" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658"}, + {file = "id-1.5.0.tar.gz", hash = "sha256:292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d"}, +] + +[package.dependencies] +requests = "*" + +[package.extras] +dev = ["build", "bump (>=1.3.2)", "id[lint,test]"] +lint = ["bandit", "interrogate", "mypy", "ruff (<0.8.2)", "types-requests"] +test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "importlib-metadata" +version = "8.6.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version == \"3.11\""} + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +description = "Utility functions for Python class constructs" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"}, + {file = "jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "jaraco-context" +version = "6.0.1" +description = "Useful decorators and context managers" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"}, + {file = "jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3"}, +] + +[package.dependencies] +"backports.tarfile" = {version = "*", markers = "python_version < \"3.12\""} + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["portend", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] + +[[package]] +name = "jaraco-functools" +version = "4.1.0" +description = "Functools like those found in stdlib" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "jaraco.functools-4.1.0-py3-none-any.whl", hash = "sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649"}, + {file = "jaraco_functools-4.1.0.tar.gz", hash = "sha256:70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.classes", "pytest (>=6,!=8.1.*)"] +type = ["pytest-mypy"] + +[[package]] +name = "jeepney" +version = "0.9.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\"" +files = [ + {file = "jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683"}, + {file = "jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732"}, +] + +[package.extras] +test = ["async-timeout ; python_version < \"3.11\"", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["trio"] + +[[package]] +name = "jsonpatch" +version = "1.33" +description = "Apply JSON-Patches (RFC 6902)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main"] +files = [ + {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, + {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, +] + +[package.dependencies] +jsonpointer = ">=1.9" + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "keyring" +version = "25.6.0" +description = "Store and access your passwords safely." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "keyring-25.6.0-py3-none-any.whl", hash = "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd"}, + {file = "keyring-25.6.0.tar.gz", hash = "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66"}, +] + +[package.dependencies] +importlib_metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} +"jaraco.classes" = "*" +"jaraco.context" = "*" +"jaraco.functools" = "*" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +completion = ["shtab (>=1.1.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["pyfakefs", "pytest (>=6,!=8.1.*)"] +type = ["pygobject-stubs", "pytest-mypy", "shtab", "types-pywin32"] + +[[package]] +name = "langchain" +version = "0.3.26" +description = "Building applications with LLMs through composability" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langchain-0.3.26-py3-none-any.whl", hash = "sha256:361bb2e61371024a8c473da9f9c55f4ee50f269c5ab43afdb2b1309cb7ac36cf"}, + {file = "langchain-0.3.26.tar.gz", hash = "sha256:8ff034ee0556d3e45eff1f1e96d0d745ced57858414dba7171c8ebdbeb5580c9"}, +] + +[package.dependencies] +langchain-core = ">=0.3.66,<1.0.0" +langchain-text-splitters = ">=0.3.8,<1.0.0" +langsmith = ">=0.1.17" +pydantic = ">=2.7.4,<3.0.0" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" + +[package.extras] +anthropic = ["langchain-anthropic"] +aws = ["langchain-aws"] +azure-ai = ["langchain-azure-ai"] +cohere = ["langchain-cohere"] +community = ["langchain-community"] +deepseek = ["langchain-deepseek"] +fireworks = ["langchain-fireworks"] +google-genai = ["langchain-google-genai"] +google-vertexai = ["langchain-google-vertexai"] +groq = ["langchain-groq"] +huggingface = ["langchain-huggingface"] +mistralai = ["langchain-mistralai"] +ollama = ["langchain-ollama"] +openai = ["langchain-openai"] +perplexity = ["langchain-perplexity"] +together = ["langchain-together"] +xai = ["langchain-xai"] + +[[package]] +name = "langchain-core" +version = "0.3.69" +description = "Building applications with LLMs through composability" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langchain_core-0.3.69-py3-none-any.whl", hash = "sha256:383e9cb4919f7ef4b24bf8552ef42e4323c064924fea88b28dd5d7ddb740d3b8"}, + {file = "langchain_core-0.3.69.tar.gz", hash = "sha256:c132961117cc7f0227a4c58dd3e209674a6dd5b7e74abc61a0df93b0d736e283"}, +] + +[package.dependencies] +jsonpatch = ">=1.33,<2.0" +langsmith = ">=0.3.45" +packaging = ">=23.2" +pydantic = ">=2.7.4" +PyYAML = ">=5.3" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" +typing-extensions = ">=4.7" + +[[package]] +name = "langchain-text-splitters" +version = "0.3.8" +description = "LangChain text splitting utilities" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "langchain_text_splitters-0.3.8-py3-none-any.whl", hash = "sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02"}, + {file = "langchain_text_splitters-0.3.8.tar.gz", hash = "sha256:116d4b9f2a22dda357d0b79e30acf005c5518177971c66a9f1ab0edfdb0f912e"}, +] + +[package.dependencies] +langchain-core = ">=0.3.51,<1.0.0" + +[[package]] +name = "langgraph" +version = "0.5.3" +description = "Building stateful, multi-actor applications with LLMs" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langgraph-0.5.3-py3-none-any.whl", hash = "sha256:9819b88a6ef6134a0fa6d6121a81b202dc3d17b25cf7ea3fe4d7669b9b252b5d"}, + {file = "langgraph-0.5.3.tar.gz", hash = "sha256:36d4b67f984ff2649d447826fc99b1a2af3e97599a590058f20750048e4f548f"}, +] + +[package.dependencies] +langchain-core = ">=0.1" +langgraph-checkpoint = ">=2.1.0,<3.0.0" +langgraph-prebuilt = ">=0.5.0,<0.6.0" +langgraph-sdk = ">=0.1.42,<0.2.0" +pydantic = ">=2.7.4" +xxhash = ">=3.5.0" + +[[package]] +name = "langgraph-checkpoint" +version = "2.1.1" +description = "Library with base interfaces for LangGraph checkpoint savers." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langgraph_checkpoint-2.1.1-py3-none-any.whl", hash = "sha256:5a779134fd28134a9a83d078be4450bbf0e0c79fdf5e992549658899e6fc5ea7"}, + {file = "langgraph_checkpoint-2.1.1.tar.gz", hash = "sha256:72038c0f9e22260cb9bff1f3ebe5eb06d940b7ee5c1e4765019269d4f21cf92d"}, +] + +[package.dependencies] +langchain-core = ">=0.2.38" +ormsgpack = ">=1.10.0" + +[[package]] +name = "langgraph-prebuilt" +version = "0.5.1" +description = "Library with high-level APIs for creating and executing LangGraph agents and tools." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langgraph_prebuilt-0.5.1-py3-none-any.whl", hash = "sha256:60a752c62a954fab816e9047e1dd05df8f2fabbdf59e1c745d9e2f700202662f"}, + {file = "langgraph_prebuilt-0.5.1.tar.gz", hash = "sha256:43a361612b8fb9784338bfc481245e3422ca366ca8e43f68c4c6723d7eb8b9f4"}, +] + +[package.dependencies] +langchain-core = ">=0.3.22" +langgraph-checkpoint = ">=2.1.0" + +[[package]] +name = "langgraph-sdk" +version = "0.1.73" +description = "SDK for interacting with LangGraph API" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langgraph_sdk-0.1.73-py3-none-any.whl", hash = "sha256:a60ac33f70688ad07051edff1d5ed8089c8f0de1f69dc900be46e095ca20eed8"}, + {file = "langgraph_sdk-0.1.73.tar.gz", hash = "sha256:6e6dcdf66bcf8710739899616856527a72a605ce15beb76fbac7f4ce0e2ad080"}, +] + +[package.dependencies] +httpx = ">=0.25.2" +orjson = ">=3.10.1" + +[[package]] +name = "langsmith" +version = "0.4.7" +description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "langsmith-0.4.7-py3-none-any.whl", hash = "sha256:de91f1abdd65da369996f8eedb5201f442110c9c3bde5babc6f5300f07da65df"}, + {file = "langsmith-0.4.7.tar.gz", hash = "sha256:3864cf29295c2565c578e93d1533f5b39e2b4af616545ace30f069635a319890"}, +] + +[package.dependencies] +httpx = ">=0.23.0,<1" +orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} +packaging = ">=23.2" +pydantic = ">=1,<3" +requests = ">=2,<3" +requests-toolbelt = ">=1.0.0,<2.0.0" +zstandard = ">=0.23.0,<0.24.0" + +[package.extras] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] +openai-agents = ["openai-agents (>=0.0.3,<0.1)"] +otel = ["opentelemetry-api (>=1.30.0,<2.0.0)", "opentelemetry-exporter-otlp-proto-http (>=1.30.0,<2.0.0)", "opentelemetry-sdk (>=1.30.0,<2.0.0)"] +pytest = ["pytest (>=7.0.0)", "rich (>=13.9.4,<14.0.0)"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "more-itertools" +version = "10.7.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "more_itertools-10.7.0-py3-none-any.whl", hash = "sha256:d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e"}, + {file = "more_itertools-10.7.0.tar.gz", hash = "sha256:9fddd5403be01a94b204faadcff459ec3568cf110265d3c54323e1e866ad29d3"}, +] + +[[package]] +name = "multidict" +version = "6.4.3" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5"}, + {file = "multidict-6.4.3-cp310-cp310-win32.whl", hash = "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e"}, + {file = "multidict-6.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7"}, + {file = "multidict-6.4.3-cp311-cp311-win32.whl", hash = "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378"}, + {file = "multidict-6.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a"}, + {file = "multidict-6.4.3-cp312-cp312-win32.whl", hash = "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124"}, + {file = "multidict-6.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8"}, + {file = "multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3"}, + {file = "multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4"}, + {file = "multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5"}, + {file = "multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df"}, + {file = "multidict-6.4.3-cp39-cp39-win32.whl", hash = "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f"}, + {file = "multidict-6.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897"}, + {file = "multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9"}, + {file = "multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec"}, +] + +[[package]] +name = "nh3" +version = "0.2.21" +description = "Python binding to Ammonia HTML sanitizer Rust crate" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "nh3-0.2.21-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:fcff321bd60c6c5c9cb4ddf2554e22772bb41ebd93ad88171bbbb6f271255286"}, + {file = "nh3-0.2.21-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eedcd7d08b0eae28ba47f43fd33a653b4cdb271d64f1aeda47001618348fde"}, + {file = "nh3-0.2.21-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d426d7be1a2f3d896950fe263332ed1662f6c78525b4520c8e9861f8d7f0d243"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9d67709bc0d7d1f5797b21db26e7a8b3d15d21c9c5f58ccfe48b5328483b685b"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:55823c5ea1f6b267a4fad5de39bc0524d49a47783e1fe094bcf9c537a37df251"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:818f2b6df3763e058efa9e69677b5a92f9bc0acff3295af5ed013da544250d5b"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b3b5c58161e08549904ac4abd450dacd94ff648916f7c376ae4b2c0652b98ff9"}, + {file = "nh3-0.2.21-cp313-cp313t-win32.whl", hash = "sha256:637d4a10c834e1b7d9548592c7aad760611415fcd5bd346f77fd8a064309ae6d"}, + {file = "nh3-0.2.21-cp313-cp313t-win_amd64.whl", hash = "sha256:713d16686596e556b65e7f8c58328c2df63f1a7abe1277d87625dcbbc012ef82"}, + {file = "nh3-0.2.21-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a772dec5b7b7325780922dd904709f0f5f3a79fbf756de5291c01370f6df0967"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d002b648592bf3033adfd875a48f09b8ecc000abd7f6a8769ed86b6ccc70c759"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2a5174551f95f2836f2ad6a8074560f261cf9740a48437d6151fd2d4d7d617ab"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b8d55ea1fc7ae3633d758a92aafa3505cd3cc5a6e40470c9164d54dff6f96d42"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ae319f17cd8960d0612f0f0ddff5a90700fa71926ca800e9028e7851ce44a6f"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ca02ac6f27fc80f9894409eb61de2cb20ef0a23740c7e29f9ec827139fa578"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f77e62aed5c4acad635239ac1290404c7e940c81abe561fd2af011ff59f585"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:087ffadfdcd497658c3adc797258ce0f06be8a537786a7217649fc1c0c60c293"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ac7006c3abd097790e611fe4646ecb19a8d7f2184b882f6093293b8d9b887431"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:6141caabe00bbddc869665b35fc56a478eb774a8c1dfd6fba9fe1dfdf29e6efa"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:20979783526641c81d2f5bfa6ca5ccca3d1e4472474b162c6256745fbfe31cd1"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a7ea28cd49293749d67e4fcf326c554c83ec912cd09cd94aa7ec3ab1921c8283"}, + {file = "nh3-0.2.21-cp38-abi3-win32.whl", hash = "sha256:6c9c30b8b0d291a7c5ab0967ab200598ba33208f754f2f4920e9343bdd88f79a"}, + {file = "nh3-0.2.21-cp38-abi3-win_amd64.whl", hash = "sha256:bb0014948f04d7976aabae43fcd4cb7f551f9f8ce785a4c9ef66e6c2590f8629"}, + {file = "nh3-0.2.21.tar.gz", hash = "sha256:4990e7ee6a55490dbf00d61a6f476c9a3258e31e711e13713b2ea7d6616f670e"}, +] + +[[package]] +name = "openfga-sdk" +version = "0.9.5" +description = "A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "openfga_sdk-0.9.5-py3-none-any.whl", hash = "sha256:0a8e338a0c80b72e283edc6423e1869ee4884868fe41616b0e943c8aa74b0495"}, + {file = "openfga_sdk-0.9.5.tar.gz", hash = "sha256:75636dac99fb107aee570f5b11689d7b9d77b219f364586651f23301be0329ed"}, +] + +[package.dependencies] +aiohttp = ">=3.9.3,<4" +build = ">=1.2.1,<2" +opentelemetry-api = ">=1.25.0,<2" +python-dateutil = ">=2.9.0,<3" +setuptools = ">=69.1.1" +urllib3 = ">=1.26.19,<3" + +[[package]] +name = "opentelemetry-api" +version = "1.32.1" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "opentelemetry_api-1.32.1-py3-none-any.whl", hash = "sha256:bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724"}, + {file = "opentelemetry_api-1.32.1.tar.gz", hash = "sha256:a5be71591694a4d9195caf6776b055aa702e964d961051a0715d05f8632c32fb"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<8.7.0" + +[[package]] +name = "orjson" +version = "3.10.18" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "orjson-3.10.18-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a45e5d68066b408e4bc383b6e4ef05e717c65219a9e1390abc6155a520cac402"}, + {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be3b9b143e8b9db05368b13b04c84d37544ec85bb97237b3a923f076265ec89c"}, + {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9b0aa09745e2c9b3bf779b096fa71d1cc2d801a604ef6dd79c8b1bfef52b2f92"}, + {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53a245c104d2792e65c8d225158f2b8262749ffe64bc7755b00024757d957a13"}, + {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9495ab2611b7f8a0a8a505bcb0f0cbdb5469caafe17b0e404c3c746f9900469"}, + {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73be1cbcebadeabdbc468f82b087df435843c809cd079a565fb16f0f3b23238f"}, + {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8936ee2679e38903df158037a2f1c108129dee218975122e37847fb1d4ac68"}, + {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7115fcbc8525c74e4c2b608129bef740198e9a120ae46184dac7683191042056"}, + {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:771474ad34c66bc4d1c01f645f150048030694ea5b2709b87d3bda273ffe505d"}, + {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c14047dbbea52886dd87169f21939af5d55143dad22d10db6a7514f058156a8"}, + {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:641481b73baec8db14fdf58f8967e52dc8bda1f2aba3aa5f5c1b07ed6df50b7f"}, + {file = "orjson-3.10.18-cp310-cp310-win32.whl", hash = "sha256:607eb3ae0909d47280c1fc657c4284c34b785bae371d007595633f4b1a2bbe06"}, + {file = "orjson-3.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:8770432524ce0eca50b7efc2a9a5f486ee0113a5fbb4231526d414e6254eba92"}, + {file = "orjson-3.10.18-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e0a183ac3b8e40471e8d843105da6fbe7c070faab023be3b08188ee3f85719b8"}, + {file = "orjson-3.10.18-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5ef7c164d9174362f85238d0cd4afdeeb89d9e523e4651add6a5d458d6f7d42d"}, + {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd14c5d99cdc7bf93f22b12ec3b294931518aa019e2a147e8aa2f31fd3240f7"}, + {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b672502323b6cd133c4af6b79e3bea36bad2d16bca6c1f645903fce83909a7a"}, + {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51f8c63be6e070ec894c629186b1c0fe798662b8687f3d9fdfa5e401c6bd7679"}, + {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f9478ade5313d724e0495d167083c6f3be0dd2f1c9c8a38db9a9e912cdaf947"}, + {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:187aefa562300a9d382b4b4eb9694806e5848b0cedf52037bb5c228c61bb66d4"}, + {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da552683bc9da222379c7a01779bddd0ad39dd699dd6300abaf43eadee38334"}, + {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e450885f7b47a0231979d9c49b567ed1c4e9f69240804621be87c40bc9d3cf17"}, + {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5e3c9cc2ba324187cd06287ca24f65528f16dfc80add48dc99fa6c836bb3137e"}, + {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:50ce016233ac4bfd843ac5471e232b865271d7d9d44cf9d33773bcd883ce442b"}, + {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b3ceff74a8f7ffde0b2785ca749fc4e80e4315c0fd887561144059fb1c138aa7"}, + {file = "orjson-3.10.18-cp311-cp311-win32.whl", hash = "sha256:fdba703c722bd868c04702cac4cb8c6b8ff137af2623bc0ddb3b3e6a2c8996c1"}, + {file = "orjson-3.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:c28082933c71ff4bc6ccc82a454a2bffcef6e1d7379756ca567c772e4fb3278a"}, + {file = "orjson-3.10.18-cp311-cp311-win_arm64.whl", hash = "sha256:a6c7c391beaedd3fa63206e5c2b7b554196f14debf1ec9deb54b5d279b1b46f5"}, + {file = "orjson-3.10.18-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:50c15557afb7f6d63bc6d6348e0337a880a04eaa9cd7c9d569bcb4e760a24753"}, + {file = "orjson-3.10.18-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:356b076f1662c9813d5fa56db7d63ccceef4c271b1fb3dd522aca291375fcf17"}, + {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:559eb40a70a7494cd5beab2d73657262a74a2c59aff2068fdba8f0424ec5b39d"}, + {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3c29eb9a81e2fbc6fd7ddcfba3e101ba92eaff455b8d602bf7511088bbc0eae"}, + {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6612787e5b0756a171c7d81ba245ef63a3533a637c335aa7fcb8e665f4a0966f"}, + {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ac6bd7be0dcab5b702c9d43d25e70eb456dfd2e119d512447468f6405b4a69c"}, + {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9f72f100cee8dde70100406d5c1abba515a7df926d4ed81e20a9730c062fe9ad"}, + {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca85398d6d093dd41dc0983cbf54ab8e6afd1c547b6b8a311643917fbf4e0c"}, + {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22748de2a07fcc8781a70edb887abf801bb6142e6236123ff93d12d92db3d406"}, + {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3a83c9954a4107b9acd10291b7f12a6b29e35e8d43a414799906ea10e75438e6"}, + {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:303565c67a6c7b1f194c94632a4a39918e067bd6176a48bec697393865ce4f06"}, + {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:86314fdb5053a2f5a5d881f03fca0219bfdf832912aa88d18676a5175c6916b5"}, + {file = "orjson-3.10.18-cp312-cp312-win32.whl", hash = "sha256:187ec33bbec58c76dbd4066340067d9ece6e10067bb0cc074a21ae3300caa84e"}, + {file = "orjson-3.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:f9f94cf6d3f9cd720d641f8399e390e7411487e493962213390d1ae45c7814fc"}, + {file = "orjson-3.10.18-cp312-cp312-win_arm64.whl", hash = "sha256:3d600be83fe4514944500fa8c2a0a77099025ec6482e8087d7659e891f23058a"}, + {file = "orjson-3.10.18-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:69c34b9441b863175cc6a01f2935de994025e773f814412030f269da4f7be147"}, + {file = "orjson-3.10.18-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1ebeda919725f9dbdb269f59bc94f861afbe2a27dce5608cdba2d92772364d1c"}, + {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5adf5f4eed520a4959d29ea80192fa626ab9a20b2ea13f8f6dc58644f6927103"}, + {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7592bb48a214e18cd670974f289520f12b7aed1fa0b2e2616b8ed9e069e08595"}, + {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f872bef9f042734110642b7a11937440797ace8c87527de25e0c53558b579ccc"}, + {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0315317601149c244cb3ecef246ef5861a64824ccbcb8018d32c66a60a84ffbc"}, + {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0da26957e77e9e55a6c2ce2e7182a36a6f6b180ab7189315cb0995ec362e049"}, + {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb70d489bc79b7519e5803e2cc4c72343c9dc1154258adf2f8925d0b60da7c58"}, + {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9e86a6af31b92299b00736c89caf63816f70a4001e750bda179e15564d7a034"}, + {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c382a5c0b5931a5fc5405053d36c1ce3fd561694738626c77ae0b1dfc0242ca1"}, + {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8e4b2ae732431127171b875cb2668f883e1234711d3c147ffd69fe5be51a8012"}, + {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d808e34ddb24fc29a4d4041dcfafbae13e129c93509b847b14432717d94b44f"}, + {file = "orjson-3.10.18-cp313-cp313-win32.whl", hash = "sha256:ad8eacbb5d904d5591f27dee4031e2c1db43d559edb8f91778efd642d70e6bea"}, + {file = "orjson-3.10.18-cp313-cp313-win_amd64.whl", hash = "sha256:aed411bcb68bf62e85588f2a7e03a6082cc42e5a2796e06e72a962d7c6310b52"}, + {file = "orjson-3.10.18-cp313-cp313-win_arm64.whl", hash = "sha256:f54c1385a0e6aba2f15a40d703b858bedad36ded0491e55d35d905b2c34a4cc3"}, + {file = "orjson-3.10.18-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95fae14225edfd699454e84f61c3dd938df6629a00c6ce15e704f57b58433bb"}, + {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5232d85f177f98e0cefabb48b5e7f60cff6f3f0365f9c60631fecd73849b2a82"}, + {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2783e121cafedf0d85c148c248a20470018b4ffd34494a68e125e7d5857655d1"}, + {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e54ee3722caf3db09c91f442441e78f916046aa58d16b93af8a91500b7bbf273"}, + {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2daf7e5379b61380808c24f6fc182b7719301739e4271c3ec88f2984a2d61f89"}, + {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f39b371af3add20b25338f4b29a8d6e79a8c7ed0e9dd49e008228a065d07781"}, + {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b819ed34c01d88c6bec290e6842966f8e9ff84b7694632e88341363440d4cc0"}, + {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2f6c57debaef0b1aa13092822cbd3698a1fb0209a9ea013a969f4efa36bdea57"}, + {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:755b6d61ffdb1ffa1e768330190132e21343757c9aa2308c67257cc81a1a6f5a"}, + {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce8d0a875a85b4c8579eab5ac535fb4b2a50937267482be402627ca7e7570ee3"}, + {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57b5d0673cbd26781bebc2bf86f99dd19bd5a9cb55f71cc4f66419f6b50f3d77"}, + {file = "orjson-3.10.18-cp39-cp39-win32.whl", hash = "sha256:951775d8b49d1d16ca8818b1f20c4965cae9157e7b562a2ae34d3967b8f21c8e"}, + {file = "orjson-3.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:fdd9d68f83f0bc4406610b1ac68bdcded8c5ee58605cc69e643a06f4d075f429"}, + {file = "orjson-3.10.18.tar.gz", hash = "sha256:e8da3947d92123eda795b68228cafe2724815621fe35e8e320a9e9593a4bcd53"}, +] + +[[package]] +name = "ormsgpack" +version = "1.10.0" +description = "Fast, correct Python msgpack library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ormsgpack-1.10.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8a52c7ce7659459f3dc8dec9fd6a6c76f855a0a7e2b61f26090982ac10b95216"}, + {file = "ormsgpack-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:060f67fe927582f4f63a1260726d019204b72f460cf20930e6c925a1d129f373"}, + {file = "ormsgpack-1.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7058ef6092f995561bf9f71d6c9a4da867b6cc69d2e94cb80184f579a3ceed5"}, + {file = "ormsgpack-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f6f3509c1b0e51b15552d314b1d409321718122e90653122ce4b997f01453a"}, + {file = "ormsgpack-1.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c1edafd5c72b863b1f875ec31c529f09c872a5ff6fe473b9dfaf188ccc3227"}, + {file = "ormsgpack-1.10.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c780b44107a547a9e9327270f802fa4d6b0f6667c9c03c3338c0ce812259a0f7"}, + {file = "ormsgpack-1.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:137aab0d5cdb6df702da950a80405eb2b7038509585e32b4e16289604ac7cb84"}, + {file = "ormsgpack-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:3e666cb63030538fa5cd74b1e40cb55b6fdb6e2981f024997a288bf138ebad07"}, + {file = "ormsgpack-1.10.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4bb7df307e17b36cbf7959cd642c47a7f2046ae19408c564e437f0ec323a7775"}, + {file = "ormsgpack-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8817ae439c671779e1127ee62f0ac67afdeaeeacb5f0db45703168aa74a2e4af"}, + {file = "ormsgpack-1.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f345f81e852035d80232e64374d3a104139d60f8f43c6c5eade35c4bac5590e"}, + {file = "ormsgpack-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21de648a1c7ef692bdd287fb08f047bd5371d7462504c0a7ae1553c39fee35e3"}, + {file = "ormsgpack-1.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3a7d844ae9cbf2112c16086dd931b2acefce14cefd163c57db161170c2bfa22b"}, + {file = "ormsgpack-1.10.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e4d80585403d86d7f800cf3d0aafac1189b403941e84e90dd5102bb2b92bf9d5"}, + {file = "ormsgpack-1.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:da1de515a87e339e78a3ccf60e39f5fb740edac3e9e82d3c3d209e217a13ac08"}, + {file = "ormsgpack-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:57c4601812684024132cbb32c17a7d4bb46ffc7daf2fddf5b697391c2c4f142a"}, + {file = "ormsgpack-1.10.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4e159d50cd4064d7540e2bc6a0ab66eab70b0cc40c618b485324ee17037527c0"}, + {file = "ormsgpack-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb47c85f3a866e29279d801115b554af0fefc409e2ed8aa90aabfa77efe5cc6"}, + {file = "ormsgpack-1.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c28249574934534c9bd5dce5485c52f21bcea0ee44d13ece3def6e3d2c3798b5"}, + {file = "ormsgpack-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1957dcadbb16e6a981cd3f9caef9faf4c2df1125e2a1b702ee8236a55837ce07"}, + {file = "ormsgpack-1.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b29412558c740bf6bac156727aa85ac67f9952cd6f071318f29ee72e1a76044"}, + {file = "ormsgpack-1.10.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6933f350c2041ec189fe739f0ba7d6117c8772f5bc81f45b97697a84d03020dd"}, + {file = "ormsgpack-1.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a86de06d368fcc2e58b79dece527dc8ca831e0e8b9cec5d6e633d2777ec93d0"}, + {file = "ormsgpack-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:35fa9f81e5b9a0dab42e09a73f7339ecffdb978d6dbf9deb2ecf1e9fc7808722"}, + {file = "ormsgpack-1.10.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8d816d45175a878993b7372bd5408e0f3ec5a40f48e2d5b9d8f1cc5d31b61f1f"}, + {file = "ormsgpack-1.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90345ccb058de0f35262893751c603b6376b05f02be2b6f6b7e05d9dd6d5643"}, + {file = "ormsgpack-1.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144b5e88f1999433e54db9d637bae6fe21e935888be4e3ac3daecd8260bd454e"}, + {file = "ormsgpack-1.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2190b352509d012915921cca76267db136cd026ddee42f1b0d9624613cc7058c"}, + {file = "ormsgpack-1.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:86fd9c1737eaba43d3bb2730add9c9e8b5fbed85282433705dd1b1e88ea7e6fb"}, + {file = "ormsgpack-1.10.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:33afe143a7b61ad21bb60109a86bb4e87fec70ef35db76b89c65b17e32da7935"}, + {file = "ormsgpack-1.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f23d45080846a7b90feabec0d330a9cc1863dc956728412e4f7986c80ab3a668"}, + {file = "ormsgpack-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:534d18acb805c75e5fba09598bf40abe1851c853247e61dda0c01f772234da69"}, + {file = "ormsgpack-1.10.0-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:efdb25cf6d54085f7ae557268d59fd2d956f1a09a340856e282d2960fe929f32"}, + {file = "ormsgpack-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddfcb30d4b1be2439836249d675f297947f4fb8efcd3eeb6fd83021d773cadc4"}, + {file = "ormsgpack-1.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee0944b6ccfd880beb1ca29f9442a774683c366f17f4207f8b81c5e24cadb453"}, + {file = "ormsgpack-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35cdff6a0d3ba04e40a751129763c3b9b57a602c02944138e4b760ec99ae80a1"}, + {file = "ormsgpack-1.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:599ccdabc19c618ef5de6e6f2e7f5d48c1f531a625fa6772313b8515bc710681"}, + {file = "ormsgpack-1.10.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:bf46f57da9364bd5eefd92365c1b78797f56c6f780581eecd60cd7b367f9b4d3"}, + {file = "ormsgpack-1.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b796f64fdf823dedb1e35436a4a6f889cf78b1aa42d3097c66e5adfd8c3bd72d"}, + {file = "ormsgpack-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:106253ac9dc08520951e556b3c270220fcb8b4fef0d30b71eedac4befa4de749"}, + {file = "ormsgpack-1.10.0.tar.gz", hash = "sha256:7f7a27efd67ef22d7182ec3b7fa7e9d147c3ad9be2a24656b23c989077e08b16"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "test"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "propcache" +version = "0.3.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, + {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, + {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, + {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, + {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, + {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, + {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, + {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, + {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, + {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, + {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, + {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, + {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, + {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, + {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, +] + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\""} + +[[package]] +name = "pydantic" +version = "2.11.4" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic-2.11.4-py3-none-any.whl", hash = "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb"}, + {file = "pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.33.2" +typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, + {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pygments" +version = "2.19.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjwt" +version = "2.10.1" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +description = "Wrappers to call pyproject.toml-based build backend hooks." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, + {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, +] + +[[package]] +name = "pytest" +version = "8.3.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.25.3" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3"}, + {file = "pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a"}, +] + +[package.dependencies] +pytest = ">=8.2,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-randomly" +version = "3.16.0" +description = "Pytest plugin to randomly order tests and control random.seed." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pytest_randomly-3.16.0-py3-none-any.whl", hash = "sha256:8633d332635a1a0983d3bba19342196807f6afb17c3eef78e02c2f85dade45d6"}, + {file = "pytest_randomly-3.16.0.tar.gz", hash = "sha256:11bf4d23a26484de7860d82f726c0629837cf4064b79157bd18ec9d41d7feb26"}, +] + +[package.dependencies] +pytest = "*" + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"win32\"" +files = [ + {file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"}, + {file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "readme-renderer" +version = "44.0" +description = "readme_renderer is a library for rendering readme descriptions for Warehouse" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151"}, + {file = "readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1"}, +] + +[package.dependencies] +docutils = ">=0.21.2" +nh3 = ">=0.2.14" +Pygments = ">=2.5.1" + +[package.extras] +md = ["cmarkgfm (>=0.8.0)"] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main", "dev"] +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "rfc3986" +version = "2.0.0" +description = "Validating URI References per RFC 3986" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, + {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, +] + +[package.extras] +idna2008 = ["idna"] + +[[package]] +name = "rich" +version = "14.0.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +groups = ["dev"] +files = [ + {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"}, + {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "secretstorage" +version = "3.3.3" +description = "Python bindings to FreeDesktop.org Secret Service API" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\"" +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + +[[package]] +name = "setuptools" +version = "80.3.1" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-80.3.1-py3-none-any.whl", hash = "sha256:ea8e00d7992054c4c592aeb892f6ad51fe1b4d90cc6947cc45c45717c40ec537"}, + {file = "setuptools-80.3.1.tar.gz", hash = "sha256:31e2c58dbb67c99c289f51c16d899afedae292b978f8051efaf6262d8212f927"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.40" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "SQLAlchemy-2.0.40-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-win32.whl", hash = "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-win_amd64.whl", hash = "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-win32.whl", hash = "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-win_amd64.whl", hash = "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-win32.whl", hash = "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-win_amd64.whl", hash = "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-win32.whl", hash = "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl", hash = "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-win32.whl", hash = "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl", hash = "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-win32.whl", hash = "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-win_amd64.whl", hash = "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-win32.whl", hash = "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-win_amd64.whl", hash = "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870"}, + {file = "sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a"}, + {file = "sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00"}, +] + +[package.dependencies] +greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] +aioodbc = ["aioodbc", "greenlet (>=1)"] +aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (>=1)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "tenacity" +version = "9.1.2" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, + {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, +] + +[package.extras] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] + +[[package]] +name = "twine" +version = "6.1.0" +description = "Collection of utilities for publishing packages on PyPI" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "twine-6.1.0-py3-none-any.whl", hash = "sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384"}, + {file = "twine-6.1.0.tar.gz", hash = "sha256:be324f6272eff91d07ee93f251edf232fc647935dd585ac003539b42404a8dbd"}, +] + +[package.dependencies] +id = "*" +keyring = {version = ">=15.1", markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\""} +packaging = ">=24.0" +readme-renderer = ">=35.0" +requests = ">=2.20" +requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0" +rfc3986 = ">=1.4.0" +rich = ">=12.0.0" +urllib3 = ">=1.26.0" + +[package.extras] +keyring = ["keyring (>=15.1)"] + +[[package]] +name = "typing-extensions" +version = "4.13.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.0" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, + {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + +[[package]] +name = "urllib3" +version = "2.4.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wrapt" +version = "1.17.2" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, + {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, + {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, + {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, + {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, + {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, + {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, + {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, + {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, + {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, + {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, + {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, + {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, + {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, + {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, + {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, + {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, +] + +[[package]] +name = "xxhash" +version = "3.5.0" +description = "Python binding for xxHash" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, + {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"}, + {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"}, + {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"}, + {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"}, + {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"}, + {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"}, + {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"}, + {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"}, + {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"}, + {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"}, + {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"}, + {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"}, + {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"}, + {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"}, + {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"}, + {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"}, + {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"}, + {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"}, + {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"}, + {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"}, + {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"}, + {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, +] + +[[package]] +name = "yarl" +version = "1.20.0" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19"}, + {file = "yarl-1.20.0-cp310-cp310-win32.whl", hash = "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d"}, + {file = "yarl-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5"}, + {file = "yarl-1.20.0-cp311-cp311-win32.whl", hash = "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6"}, + {file = "yarl-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b"}, + {file = "yarl-1.20.0-cp312-cp312-win32.whl", hash = "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64"}, + {file = "yarl-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384"}, + {file = "yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62"}, + {file = "yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f"}, + {file = "yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac"}, + {file = "yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0"}, + {file = "yarl-1.20.0-cp39-cp39-win32.whl", hash = "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8"}, + {file = "yarl-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7"}, + {file = "yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124"}, + {file = "yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.1" + +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version == \"3.11\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[[package]] +name = "zstandard" +version = "0.23.0" +description = "Zstandard bindings for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, + {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c"}, + {file = "zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813"}, + {file = "zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4"}, + {file = "zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e"}, + {file = "zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473"}, + {file = "zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160"}, + {file = "zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0"}, + {file = "zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094"}, + {file = "zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35"}, + {file = "zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d"}, + {file = "zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"}, + {file = "zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9"}, + {file = "zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33"}, + {file = "zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd"}, + {file = "zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"}, + {file = "zstandard-0.23.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc"}, + {file = "zstandard-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e"}, + {file = "zstandard-0.23.0-cp38-cp38-win32.whl", hash = "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9"}, + {file = "zstandard-0.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f"}, + {file = "zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb"}, + {file = "zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5"}, + {file = "zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274"}, + {file = "zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58"}, + {file = "zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09"}, +] + +[package.dependencies] +cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} + +[package.extras] +cffi = ["cffi (>=1.11)"] + +[metadata] +lock-version = "2.1" +python-versions = "^3.11" +content-hash = "df5e647d60a9c892ea0e28a5043d9eb149685b640041be730df546146c15685a" diff --git a/temp-packages/auth0-ai-langchain/pyproject.toml b/temp-packages/auth0-ai-langchain/pyproject.toml new file mode 100644 index 0000000..72e6aa5 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "auth0-ai-langchain" +version = "1.0.0b3" +description = "This package is an SDK for building secure AI-powered applications using Auth0, Okta FGA and LangChain." +license = "apache-2.0" +homepage = "https://auth0.com" +authors = ["Auth0 "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.11" +openfga-sdk = "^0.9.5" +langchain = "^0.3.26" +langgraph-sdk = "^0.1.73" +langchain-core = "^0.3.69" +langgraph = "^0.5.3" +# auth0-ai = "^1.0.0b3" +auth0-ai = { path = "../auth0-ai", develop = true } + +[tool.poetry.group.test.dependencies] +pytest-randomly = "^3.15.0" +pytest-asyncio = "^0.25.0" +pytest = "^8.2.0" + +[tool.poetry.group.dev.dependencies] +twine = "^6.1.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/temp-packages/auth0-ai-langchain/tests/__init__.py b/temp-packages/auth0-ai-langchain/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/temp-packages/auth0-ai-langchain/tests/test_FGARetriever.py b/temp-packages/auth0-ai-langchain/tests/test_FGARetriever.py new file mode 100644 index 0000000..8d0bc4f --- /dev/null +++ b/temp-packages/auth0-ai-langchain/tests/test_FGARetriever.py @@ -0,0 +1,140 @@ +from contextlib import asynccontextmanager, contextmanager +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest +from auth0_ai_langchain.FGARetriever import FGARetriever +from langchain_core.documents import Document +from langchain_core.retrievers import BaseRetriever +from openfga_sdk import ClientConfiguration +from openfga_sdk.client.models import ClientBatchCheckItem + + +@pytest.fixture +def mock_retriever(): + return MagicMock(spec=BaseRetriever) + + +@pytest.fixture +def mock_fga_configuration(): + mock = MagicMock(spec=ClientConfiguration) + mock.connection_pool_maxsize = 10 + return mock + + +@pytest.fixture +def mock_query_builder(): + return MagicMock() + + +@pytest.fixture +def fga_retriever(mock_retriever, mock_fga_configuration, mock_query_builder): + return FGARetriever( + retriever=mock_retriever, + fga_configuration=mock_fga_configuration, + build_query=mock_query_builder, + ) + + +test_cases = [ + ("normal_case", [True, False, True], 3, 2), + ("all_denied", [False, False, False], 3, 0), + ("all_allowed", [True, True, True], 3, 3), + ("empty_list", [], 0, 0), + ("single_allowed", [True], 1, 1), + ("single_denied", [False], 1, 0), +] + + +@pytest.mark.asyncio +@pytest.mark.parametrize("test_name,allowed_flags,doc_count,expected_count", test_cases) +async def test_async_get_relevant_docs( + fga_retriever, + mock_query_builder, + mock_retriever, + mock_fga_configuration, + test_name, + allowed_flags, + doc_count, + expected_count, +): + query = "test_query" + run_manager = MagicMock() + docs = [MagicMock(spec=Document, id=i) for i in range(doc_count)] + mock_query_builder.side_effect = [ + MagicMock(spec=ClientBatchCheckItem, object=f"doc:{i}") + for i in range(doc_count) + ] + mock_results = MagicMock( + result=[ + MagicMock( + allowed=x, + request=MagicMock(spec=ClientBatchCheckItem, + object=f"doc:{i}"), + ) + for i, x in enumerate(allowed_flags) + ] + ) + + mock_retriever._aget_relevant_documents = AsyncMock(return_value=docs) + mock_client_constructor = MagicMock() + + @asynccontextmanager + async def mock_client(*args, **kwargs): + mock_client_constructor(*args, **kwargs) + mock = AsyncMock() + mock.batch_check.return_value = mock_results + yield mock + + with patch("auth0_ai_langchain.FGARetriever.OpenFgaClient", mock_client): + filtered_docs = await fga_retriever._aget_relevant_documents( + query, run_manager=run_manager + ) + assert len(filtered_docs) == expected_count + mock_client_constructor.assert_called_once_with(mock_fga_configuration) + + +@pytest.mark.parametrize("test_name,allowed_flags,doc_count,expected_count", test_cases) +def test_get_relevant_docs( + fga_retriever, + mock_query_builder, + mock_retriever, + mock_fga_configuration, + test_name, + allowed_flags, + doc_count, + expected_count, +): + query = "test_query" + run_manager = MagicMock() + docs = [MagicMock(spec=Document, id=i) for i in range(doc_count)] + mock_query_builder.side_effect = [ + MagicMock(spec=ClientBatchCheckItem, object=f"doc:{i}") + for i in range(doc_count) + ] + mock_results = MagicMock( + result=[ + MagicMock( + allowed=x, + request=MagicMock(spec=ClientBatchCheckItem, + object=f"doc:{i}"), + ) + for i, x in enumerate(allowed_flags) + ] + ) + + mock_retriever._get_relevant_documents.return_value = docs + mock_client_constructor = MagicMock() + + @contextmanager + def mock_client(*args, **kwargs): + mock_client_constructor(*args, **kwargs) + mock = MagicMock() + mock.batch_check.return_value = mock_results + yield mock + + with patch("auth0_ai_langchain.FGARetriever.OpenFgaClientSync", mock_client): + filtered_docs = fga_retriever._get_relevant_documents( + query, run_manager=run_manager + ) + assert len(filtered_docs) == expected_count + mock_client_constructor.assert_called_once_with(mock_fga_configuration) diff --git a/temp-packages/auth0-ai-langchain/tests/test_QueryBuilder.py b/temp-packages/auth0-ai-langchain/tests/test_QueryBuilder.py new file mode 100644 index 0000000..9a1a171 --- /dev/null +++ b/temp-packages/auth0-ai-langchain/tests/test_QueryBuilder.py @@ -0,0 +1,147 @@ +from contextlib import asynccontextmanager, contextmanager +from unittest.mock import AsyncMock, MagicMock, call, patch + +import pytest +from auth0_ai_langchain import FGARetriever +from langchain_core.documents import Document +from langchain_core.retrievers import BaseRetriever +from openfga_sdk import ClientConfiguration +from openfga_sdk.client.models import ClientBatchCheckItem + + +@pytest.fixture +def mock_retriever(): + return MagicMock(spec=BaseRetriever) + + +@pytest.fixture +def mock_fga_configuration(): + mock = MagicMock(spec=ClientConfiguration) + mock.connection_pool_maxsize = 10 + return mock + + +@pytest.fixture +def mock_query_builder(): + return MagicMock() + + +@pytest.fixture +def fga_retriever(mock_retriever, mock_fga_configuration, mock_query_builder): + return FGARetriever( + retriever=mock_retriever, + fga_configuration=mock_fga_configuration, + build_query=mock_query_builder, + ) + + +def create_test_data(num_docs=2): + """Create test documents and check requests.""" + docs = [ + MagicMock(spec=Document, id=i, page_content=f"content_{i}") + for i in range(num_docs) + ] + check_requests = [ + MagicMock(spec=ClientBatchCheckItem, + tuple_key=f"check_{i}", object=f"doc:{i}") + for i in range(num_docs) + ] + return docs, check_requests + + +def verify_query_builder_calls(mock_query_builder, docs): + """Verify query builder was called correctly for each document.""" + assert mock_query_builder.call_count == len(docs) + for doc, call_args in zip(docs, mock_query_builder.call_args_list): + assert call_args == call(doc) + + +def verify_batch_check_calls(mock_batch_check, check_requests): + """Verify batch_check was called with correct requests.""" + mock_batch_check.assert_called_once() + called_args = mock_batch_check.call_args + assert called_args[0][0].checks == check_requests + + +@pytest.mark.asyncio +async def test_async_query_builder_integration( + fga_retriever, + mock_query_builder, + mock_retriever, + mock_fga_configuration, +): + # Setup + query = "test_query" + run_manager = MagicMock() + docs, check_requests = create_test_data() + + # Configure mocks + mock_query_builder.side_effect = check_requests + mock_retriever._aget_relevant_documents = AsyncMock(return_value=docs) + + mock_results = MagicMock( + result=[ + MagicMock( + allowed=True, + request=MagicMock(spec=ClientBatchCheckItem, + object=f"doc:{i}"), + ) + for i in range(2) + ] + ) + mock_batch_check = AsyncMock(return_value=mock_results) + + @asynccontextmanager + async def mock_client(*args, **kwargs): + mock = AsyncMock() + mock.batch_check = mock_batch_check + yield mock + + # Execute + with patch("auth0_ai_langchain.FGARetriever.OpenFgaClient", mock_client): + await fga_retriever._aget_relevant_documents(query, run_manager=run_manager) + + # Verify behaviors + verify_query_builder_calls(mock_query_builder, docs) + verify_batch_check_calls(mock_batch_check, check_requests) + + +def test_sync_query_builder_integration( + fga_retriever, + mock_query_builder, + mock_retriever, + mock_fga_configuration, +): + # Setup + query = "test_query" + run_manager = MagicMock() + docs, check_requests = create_test_data() + + # Configure mocks + mock_query_builder.side_effect = check_requests + mock_retriever._get_relevant_documents.return_value = docs + mock_results = MagicMock( + result=[ + MagicMock( + allowed=True, + request=MagicMock(spec=ClientBatchCheckItem, + object=f"doc:{i}"), + ) + for i in range(2) + ] + ) + mock_batch_check = MagicMock(return_value=mock_results) + + @contextmanager + def mock_client(*args, **kwargs): + mock = MagicMock() + mock.batch_check = mock_batch_check + yield mock + + # Execute + with patch("auth0_ai_langchain.FGARetriever.OpenFgaClientSync", mock_client): + fga_retriever._get_relevant_documents(query, run_manager=run_manager) + + # Verify behaviors + verify_query_builder_calls(mock_query_builder, docs) + verify_batch_check_calls(mock_batch_check, check_requests) diff --git a/temp-packages/auth0-ai/LICENSE b/temp-packages/auth0-ai/LICENSE new file mode 100644 index 0000000..e6815d1 --- /dev/null +++ b/temp-packages/auth0-ai/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/temp-packages/auth0-ai/README.md b/temp-packages/auth0-ai/README.md new file mode 100644 index 0000000..cdfeb0c --- /dev/null +++ b/temp-packages/auth0-ai/README.md @@ -0,0 +1,28 @@ +# Auth0 AI SDK + +`auth0-ai` is an SDK for building secure AI-powered applications using [Auth0](https://www.auth0.ai/). + +This SDK provides base abstractions for authentication and authorization in AI applications including a set of tools for implementing [asynchronous authorization](https://auth0.com/ai/docs/intro/asynchronous-authorization) using the [Client Initiated Backchannel Authentication (CIBA)](https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html) protocol. + +![Release](https://img.shields.io/pypi/v/auth0-ai) ![Downloads](https://img.shields.io/pypi/dw/auth0-ai) [![License](https://img.shields.io/:license-APACHE%202.0-blue.svg?style=flat)](https://opensource.org/license/apache-2-0) + +## Installation + +> ⚠️ **WARNING**: `auth0-ai` is currently under development and it is not intended to be used in production, and therefore has no official support. + +```bash +pip install auth0-ai +``` + +--- + +

+ + + + Auth0 Logo + +

+

Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout Why Auth0?

+

+This project is licensed under the Apache 2.0 license. See the LICENSE file for more info.

diff --git a/temp-packages/auth0-ai/auth0_ai/__init__.py b/temp-packages/auth0-ai/auth0_ai/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/__init__.py b/temp-packages/auth0-ai/auth0_ai/authorizers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/async_auth/__init__.py b/temp-packages/auth0-ai/auth0_ai/authorizers/async_auth/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/__init__.py b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/__init__.py new file mode 100644 index 0000000..8404171 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/__init__.py @@ -0,0 +1,3 @@ +from .async_authorization_request import AsyncAuthorizationRequest as AsyncAuthorizationRequest +from .async_authorizer_params import AsyncAuthorizerParams as AsyncAuthorizerParams +from .async_authorizer_base import AsyncAuthorizerBase as AsyncAuthorizerBase \ No newline at end of file diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorization_request.py b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorization_request.py new file mode 100644 index 0000000..1507581 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorization_request.py @@ -0,0 +1,14 @@ +from typing import TypedDict + +class AsyncAuthorizationRequest(TypedDict): + """ + Attributes: + id (str): The authorization request ID. Use this ID to check the status of the authorization request. + requested_at (float): The timestamp (in seconds since the Unix epoch) when the authorization request was made. + expires_in (int): The time in seconds for the authorization request to expire. + interval (int): The interval to use when polling the status. + """ + id: str + requested_at: float + expires_in: int + interval: int diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_base.py b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_base.py new file mode 100644 index 0000000..673dca8 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_base.py @@ -0,0 +1,296 @@ +import asyncio +import contextvars +import hashlib +import inspect +import json +import os +import time +from contextlib import asynccontextmanager +from datetime import datetime +from typing import Any, Callable, Dict, Generic, Optional, Sequence, TypedDict, Union +from auth0 import Auth0Error +from auth0.authentication.back_channel_login import BackChannelLogin +from auth0.authentication.get_token import GetToken +from auth0_ai.credentials import TokenResponse +from auth0_ai.authorizers.async_authorization.async_authorizer_params import AsyncAuthorizerParams +from auth0_ai.authorizers.async_authorization.async_authorization_request import AsyncAuthorizationRequest +from auth0_ai.authorizers.types import Auth0ClientParams, ToolInput +from auth0_ai.interrupts.async_authorization_interrupts import AccessDeniedInterrupt, AuthorizationPendingInterrupt, AuthorizationPollingInterrupt, AuthorizationRequestExpiredInterrupt, InvalidGrantInterrupt, UserDoesNotHavePushNotificationsInterrupt +from auth0_ai.stores import SubStore, InMemoryStore +from auth0_ai.authorizers.context import ns_from_context, ContextGetter +from auth0_ai.utils import omit + +class AsyncStorageValue(TypedDict): + context: Any + credentials: Optional[TokenResponse] + # The namespace in the Store for the Async Auth authorization response. + auth_request_ns: Sequence[str]; + +_local_storage: contextvars.ContextVar[Optional[AsyncStorageValue]] = contextvars.ContextVar("local_storage", default=None) + +def _get_local_storage() -> AsyncStorageValue: + store = _local_storage.get() + if store is None: + raise RuntimeError("The tool must be wrapped with the with_async_authorization function.") + return store + +def _update_local_storage(data: AsyncStorageValue) -> None: + store = _get_local_storage() + updated = store.copy() + updated.update(data) + _local_storage.set(updated) + +@asynccontextmanager +async def _run_with_local_storage(data: AsyncStorageValue): + if _local_storage.get() is not None: + raise RuntimeError("Cannot nest tool calls that require Async Authorization.") + token = _local_storage.set(data) + try: + yield + finally: + _local_storage.reset(token) + +def get_async_authorization_credentials() -> TokenResponse | None: + local_store = _get_local_storage() + return local_store.get("credentials") + +def _ensure_openid_scope(scopes: list[str]) -> str: + if "openid" not in scopes: + scopes.insert(0, "openid") + return " ".join(scopes) + +class AsyncAuthorizerBase(Generic[ToolInput]): + def __init__(self, params: AsyncAuthorizerParams[ToolInput], auth0: Auth0ClientParams = None): + auth0 = { + "domain": (auth0 or {}).get("domain", os.getenv("AUTH0_DOMAIN")), + "client_id": (auth0 or {}).get("client_id", os.getenv("AUTH0_CLIENT_ID")), + "client_secret": (auth0 or {}).get("client_secret", os.getenv("AUTH0_CLIENT_SECRET")), + "client_assertion_signing_key": (auth0 or {}).get("client_assertion_signing_key"), + "client_assertion_signing_alg": (auth0 or {}).get("client_assertion_signing_alg"), + "telemetry": (auth0 or {}).get("telemetry"), + "timeout": (auth0 or {}).get("timeout"), + "protocol": (auth0 or {}).get("protocol") + } + + # Remove keys with None values + auth0 = {k: v for k, v in auth0.items() if v is not None} + + self.back_channel_login = BackChannelLogin(**auth0) + self.get_token = GetToken(**auth0) + self.auth0 = auth0 + self.params = params + + # TODO: consider moving this to Auth0AI classes + async_authorization_store = SubStore(params["store"] if "store" in params else InMemoryStore()).create_sub_store("AUTH0_AI_ASYNC_AUTHORIZATION") + + self.auth_request_store = SubStore[AsyncAuthorizationRequest](async_authorization_store, { + "get_ttl": lambda auth_request: auth_request["expires_in"] * 1000 if "expires_in" in auth_request else None + }) + + self.credentials_store = SubStore[TokenResponse](async_authorization_store, { + "get_ttl": lambda credential: credential["expires_in"] * 1000 if "expires_in" in credential else None + }) + + def _handle_authorization_interrupts(self, err: Union[AuthorizationPendingInterrupt, AuthorizationPollingInterrupt]) -> None: + raise err + + def _get_instance_id(self, authorize_params) -> str: + props = { + "auth0": omit(self.auth0, ["client_secret", "client_assertion_signing_key"]), + "params": authorize_params + } + sh = json.dumps(props, sort_keys=True, separators=(",", ":")) + return hashlib.md5(sh.encode("utf-8")).hexdigest() + + async def _get_authorize_params(self, *args: ToolInput.args, **kwargs: ToolInput.kwargs) -> Dict[str, Any]: + authorize_params = { + "scope": _ensure_openid_scope(self.params.get("scopes")), + "audience": self.params.get("audience"), + "requested_expiry": self.params.get("requested_expiry"), + } + + if isinstance(self.params.get("user_id"), str): + user_id = self.params.get("user_id") + elif inspect.iscoroutinefunction(self.params.get("user_id")): + user_id = await self.params.get("user_id")(*args, **kwargs) + else: + user_id = self.params.get("user_id")(*args, **kwargs) + + if not user_id: + raise ValueError("Unable to resolve user id, check the provided user_id parameter.") + + authorize_params["login_hint"] = f'{{ "format": "iss_sub", "iss": "https://{self.back_channel_login.domain}/", "sub": "{user_id}" }}' + + if isinstance(self.params.get("binding_message"), str): + authorize_params["binding_message"] = self.params.get("binding_message") + elif inspect.iscoroutinefunction(self.params.get("binding_message")): + authorize_params["binding_message"] = await self.params.get("binding_message")(*args, **kwargs) + else: + authorize_params["binding_message"] = self.params.get("binding_message")(*args, **kwargs) + + if isinstance(self.params.get("authorization_details"), list): + authorize_params["authorization_details"] = json.dumps(self.params.get("authorization_details")) + elif inspect.iscoroutinefunction(self.params.get("authorization_details")): + authorize_params["authorization_details"] = json.dumps(await self.params.get("authorization_details")(*args, **kwargs)) + elif callable(self.params.get("authorization_details")): + authorize_params["authorization_details"] = json.dumps(self.params.get("authorization_details")(*args, **kwargs)) + + return authorize_params + + async def _start(self, authorize_params) -> AsyncAuthorizationRequest: + requested_at = time.time() + + try: + response = self.back_channel_login.back_channel_login(**authorize_params) + return AsyncAuthorizationRequest( + id=response["auth_req_id"], + requested_at=requested_at, + expires_in=response["expires_in"], + interval=response["interval"], + ) + except Auth0Error as e: + if e.error_code == "invalid_request": + raise UserDoesNotHavePushNotificationsInterrupt(e.message) + else: + raise + + def _extract_retry_after_header(self, error: Auth0Error) -> Optional[int]: + """ + Extract the Retry-After header value from an Auth0Error. + + Args: + error: The Auth0Error object that may contain HTTP headers + + Returns: + The retry-after value in seconds as an integer, or None if not present + """ + + if not hasattr(error, 'headers') or not error.headers: + return None + + retry_after = error.headers.get('retry-after') or error.headers.get('Retry-After') + + if retry_after is None: + return None + + try: + return int(retry_after) + except (ValueError, TypeError): + # If the retry-after value is not a valid integer, return None + return None + + def _get_credentials_internal(self, auth_request: AsyncAuthorizationRequest) -> TokenResponse | None: + try: + # Calculate elapsed time in seconds + elapsed_seconds = datetime.now().timestamp() - auth_request["requested_at"] + + if elapsed_seconds >= auth_request["expires_in"]: + raise AuthorizationRequestExpiredInterrupt( + "The authorization request has expired.", + auth_request + ) + + response = self.get_token.backchannel_login(auth_req_id=auth_request["id"]) + return TokenResponse( + access_token=response["access_token"], + expires_in=response["expires_in"], + scope=response.get("scope", "").split(), + token_type=response.get("token_type"), + id_token=response.get("id_token"), + refresh_token=response.get("refresh_token"), + ) + + except Auth0Error as e: + if e.error_code == "authorization_pending": + raise AuthorizationPendingInterrupt(e.message, auth_request) + + if e.error_code == "slow_down": + retry_after = self._extract_retry_after_header(e) + raise AuthorizationPollingInterrupt(e.message, auth_request, retry_after) + + if e.error_code == "invalid_grant": + raise InvalidGrantInterrupt(e.message, auth_request) + + if e.error_code == "invalid_request": + raise UserDoesNotHavePushNotificationsInterrupt(e.message) + + if e.error_code == "access_denied": + raise AccessDeniedInterrupt(e.message, auth_request) + + raise + + def _get_credentials(self, auth_request: AsyncAuthorizationRequest) -> TokenResponse | None: + return self._get_credentials_internal(auth_request) + + async def get_credentials_polling(self, auth_request: AsyncAuthorizationRequest) -> TokenResponse | None: + credentials: TokenResponse | None = None + + while not credentials: + try: + credentials = self._get_credentials_internal(auth_request) + except (AuthorizationPendingInterrupt, AuthorizationPollingInterrupt) as err: + await asyncio.sleep(err.next_retry_interval()) + except Exception: + raise + + return credentials + + async def delete_auth_request(self): + local_store = _get_local_storage() + auth_request_ns = local_store["auth_request_ns"] + await self.auth_request_store.delete(auth_request_ns, "auth_request") + + def protect( + self, + get_context: ContextGetter[ToolInput], + execute: Callable[ToolInput, any] + ) -> Callable[ToolInput, any]: + async def wrapped_execute(*args: ToolInput.args, **kwargs: ToolInput.kwargs): + context = get_context(*args, **kwargs) + authorize_params = await self._get_authorize_params(*args, **kwargs) + instance_id = self._get_instance_id(authorize_params) + auth_request_ns = [instance_id, "auth_requests", *ns_from_context("tool-call", context)] + credentials_ns = [instance_id, "credentials", *ns_from_context(self.params.get("credentials_context", "tool-call"), context)] + + local_store = { + "context": context, + "auth_request_ns": auth_request_ns, + } + + async with _run_with_local_storage(local_store): + interrupt_mode = self.params.get("on_authorization_request", "interrupt") == "interrupt" + + try: + credentials = await self.credentials_store.get(credentials_ns, "credential") + if not credentials: + if interrupt_mode: + auth_request = await self.auth_request_store.get(auth_request_ns, "auth_request") + if not auth_request: + # initial request + auth_request = await self._start(authorize_params) + await self.auth_request_store.put(auth_request_ns, "auth_request", auth_request) + + credentials = self._get_credentials(auth_request) + else: + # block mode + auth_request = await self._start(authorize_params) + credentials = await self.get_credentials_polling(auth_request) + + await self.delete_auth_request() + + if credentials is not None: + await self.credentials_store.put(credentials_ns, "credential", credentials) + except (AuthorizationPendingInterrupt, AuthorizationPollingInterrupt) as interrupt: + return self._handle_authorization_interrupts(interrupt) + except Exception as err: + await self.delete_auth_request() + raise + + _update_local_storage({"credentials": credentials}) + + if inspect.iscoroutinefunction(execute): + return await execute(*args, **kwargs) + else: + return execute(*args, **kwargs) + + return wrapped_execute diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_params.py b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_params.py new file mode 100644 index 0000000..195f7ab --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/async_authorization/async_authorizer_params.py @@ -0,0 +1,48 @@ +from typing import Awaitable, Callable, Generic, Literal, Optional, TypedDict, Union +from auth0_ai.authorizers.context import AuthContext +from auth0_ai.authorizers.types import ToolInput +from auth0_ai.stores import Store + + +class AsyncAuthorizerParams(TypedDict, Generic[ToolInput]): + """ + Authorize Options to start Async Authorization flow. + + Attributes: + scopes (list[str]): The scopes to request authorization for. + binding_message (Union[str, Callable[..., str], Callable[..., Awaitable[str]]]): A human-readable string to display to the user, or a function that resolves it. + user_id (Union[str, Callable[..., str], Callable[..., Awaitable[str]]]): The user id string, or a function that resolves it. + authorization_details (Union[list[dict], Callable[..., list[dict]], Callable[..., Awaitable[list[dict]]]], optional):The authorization requirements list (e.g., [{ type: "custom_type", param: "example", ...}]), or a function that resolves it. More info: https://auth0.com/docs/get-started/authentication-and-authorization-flow/client-initiated-backchannel-authentication-flow/user-authorization-with-ciba + store (Store, optional): An store used to temporarly store the authorization response data while the user is completing the authorization in another device (default: InMemoryStore). + audience (str, optional): The audience to request authorization for. + requested_expiry (int, optional): The time in seconds for the authorization request to expire, pass a number between 1 and 3600 (default: 300 seconds = 5 minutes). + on_authorization_request (string, optional): The behavior when the authorization request is made. Expected values: + - "interrupt" (default): The tool execution is interrupted until the user completes the authorization. + - "block": The tool execution is blocked until the user completes the authorization. This mode is only useful for development purposes and should not be used in production. + credentials_context (AuthContext, optional): Defines the scope of credential sharing: + - "tool-call" (default): Credentials are valid only for a single invocation of the tool. + - "agent": Credentials are shared globally across all threads and tools in the agent. + - "thread": Credentials are shared across all tools using the same authorizer within the current thread. + - "tool": Credentials are shared across multiple calls to the same tool within the same thread. + """ + scopes: list[str] + binding_message: Union[ + str, + Callable[ToolInput, str], + Callable[ToolInput, Awaitable[str]] + ] + user_id: Union[ + str, + Callable[ToolInput, str], + Callable[ToolInput, Awaitable[str]] + ] + authorization_details: Optional[Union[ + list[dict], + Callable[ToolInput, list[dict]], + Callable[ToolInput, Awaitable[list[dict]]] + ]] + store: Optional[Store] + audience: Optional[str] + requested_expiry: Optional[int] + on_authorization_request: Optional[Literal["block", "interrupt"]] + credentials_context: Optional[AuthContext] diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/context.py b/temp-packages/auth0-ai/auth0_ai/authorizers/context.py new file mode 100644 index 0000000..65e42cd --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/context.py @@ -0,0 +1,36 @@ +from typing import Callable, Literal, TypedDict +from auth0_ai.authorizers.types import ToolInput + +class ToolCallContext(TypedDict): + thread_id: str + tool_call_id: str + tool_name: str + +AuthContext = Literal["tool-call", "tool", "thread", "agent"] + +ContextGetter = Callable[ToolInput, ToolCallContext] + +def ns_from_context(auth_context: AuthContext, call_context: ToolCallContext) -> list[str]: + """ + Resolve a namespace based on the credential-sharing scope (auth_context). + + Args: + auth_context (AuthContext): The context in which credentials are scoped. + call_context (ToolCallContext): Information about the current tool call. + + Returns: + list[str]: A list of namespace components. + """ + thread_ns = ["threads", call_context["thread_id"]] + tool_ns = ["tools", call_context["tool_name"]] + tool_call_ns = ["tool_calls", call_context["tool_call_id"]] + + match auth_context: + case "tool-call": + return thread_ns + tool_ns + tool_call_ns + case "tool": + return thread_ns + tool_ns + case "thread": + return thread_ns + case "agent": + return [] diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/fga_authorizer.py b/temp-packages/auth0-ai/auth0_ai/authorizers/fga_authorizer.py new file mode 100644 index 0000000..67aaf5e --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/fga_authorizer.py @@ -0,0 +1,102 @@ +import asyncio +import functools +import inspect +import os +from typing import Any, Awaitable, Callable, TypedDict, Optional, Union +from openfga_sdk import OpenFgaClient, ConsistencyPreference, ClientConfiguration +from openfga_sdk.client import ClientCheckRequest +from openfga_sdk.credentials import Credentials, CredentialConfiguration +from auth0_ai.authorizers.types import ToolInput + +class FGAAuthorizerCredentialsConfig(TypedDict, total=False): + api_issuer: str + api_audience: str + client_id: str + client_secret: str + +class FGAAuthorizerCredentials(TypedDict, total=False): + method: Any + config: FGAAuthorizerCredentialsConfig + +class FGAAuthorizerParams(TypedDict, total=False): + api_url: str + store_id: str + authorization_model_id: Optional[str] + credentials: FGAAuthorizerCredentials + +class FGAAuthorizerOptions(TypedDict): + build_query: Callable[ToolInput, Union[ClientCheckRequest, Awaitable[ClientCheckRequest]]] + on_unauthorized: Optional[Callable[ToolInput, Any]] = None + +FGAInstance = Callable[ + [FGAAuthorizerOptions], + Callable[ToolInput, Callable[ToolInput, Any]] +] + +def _merge_args_kwargs(fn: Callable, *args, **kwargs) -> dict: + sig = inspect.signature(fn) + bound = sig.bind(*args, **kwargs) + bound.apply_defaults() + return dict(bound.arguments) + +class FGAAuthorizer: + def __init__(self, params: Optional[FGAAuthorizerParams] = None): + params = params or {} + credentials = params.get("credentials", {}) + credentials_config = credentials.get("config", {}) + + self.fga_configuration = ClientConfiguration( + api_url=params.get("api_url", os.getenv("FGA_API_URL", "https://api.us1.fga.dev")), + store_id=params.get("store_id", os.getenv("FGA_STORE_ID")), + authorization_model_id=params.get("authorization_model_id", os.getenv("FGA_MODEL_ID")), + credentials=Credentials( + method=credentials.get("method", "client_credentials"), + configuration=CredentialConfiguration( + api_issuer=credentials_config.get("api_issuer", os.getenv("FGA_API_TOKEN_ISSUER", "auth.fga.dev")), + api_audience=credentials_config.get("api_audience", os.getenv("FGA_API_AUDIENCE", "https://api.us1.fga.dev/")), + client_id=credentials_config.get("client_id", os.getenv("FGA_CLIENT_ID")), + client_secret=credentials_config.get("client_secret", os.getenv("FGA_CLIENT_SECRET")), + ) + ) + ) + + async def _authorize(self, options: FGAAuthorizerOptions, tool_context: Optional[Any] = None) -> bool: + query = await options["build_query"](tool_context) if asyncio.iscoroutinefunction(options["build_query"]) else options["build_query"](tool_context) + + async with OpenFgaClient(self.fga_configuration) as fga_client: + response = await fga_client.check(ClientCheckRequest(**query), {"consistency": ConsistencyPreference.HIGHER_CONSISTENCY}) + await fga_client.close() + return response.allowed + + @staticmethod + async def authorize(options: FGAAuthorizerOptions, params: Optional[FGAAuthorizerParams] = None) -> bool: + authorizer = FGAAuthorizer(params) + return await authorizer._authorize(options) + + @staticmethod + def create(params: Optional[FGAAuthorizerParams] = None) -> FGAInstance: + authorizer = FGAAuthorizer(params) + + def instance(**options: FGAAuthorizerOptions): + def fga( + handler: Callable[ToolInput, Any] + ) -> Callable[ToolInput, Awaitable[Any]]: + + @functools.wraps(handler) + async def wrapper(*args: ToolInput.args, **kwargs: ToolInput.kwargs) -> Any: + tool_context = _merge_args_kwargs(handler, *args, **kwargs) + is_authorized = await authorizer._authorize(options, tool_context) + + if not is_authorized: + if options["on_unauthorized"]: + return await options["on_unauthorized"](tool_context) if asyncio.iscoroutinefunction(options["on_unauthorized"]) else options["on_unauthorized"](tool_context) + raise Exception("The user is not allowed to perform the action.") + + # Call tool handler + return await handler(*args, **kwargs) if asyncio.iscoroutinefunction(handler) else handler(*args, **kwargs) + + return wrapper + + return fga + + return instance diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/token_vault_authorizer.py b/temp-packages/auth0-ai/auth0_ai/authorizers/token_vault_authorizer.py new file mode 100644 index 0000000..90c37f9 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/token_vault_authorizer.py @@ -0,0 +1,292 @@ +import contextvars +import hashlib +import inspect +import json +import os +from contextlib import asynccontextmanager +from typing import Awaitable, Callable, Generic, Optional, Any, TypedDict, Union +from auth0 import Auth0Error +from auth0.authentication.get_token import GetToken +from auth0_ai.authorizers.context import AuthContext, ContextGetter, ns_from_context +from auth0_ai.authorizers.types import Auth0ClientParams, AuthorizerToolParameter, ToolInput +from auth0_ai.credentials import TokenResponse +from auth0_ai.interrupts.auth0_interrupt import Auth0Interrupt +from auth0_ai.interrupts.token_vault_interrupt import TokenVaultError, TokenVaultInterrupt +from auth0_ai.stores import Store, SubStore, InMemoryStore +from auth0_ai.utils import omit + +# Subject / requested token type constants +SUBJECT_TYPE_REFRESH_TOKEN = "urn:ietf:params:oauth:token-type:refresh_token" +SUBJECT_TYPE_ACCESS_TOKEN = "urn:ietf:params:oauth:token-type:access_token" +REQUESTED_TOKEN_TYPE_TOKEN_VAULT_ACCESS_TOKEN = "http://auth0.com/oauth/token-type/federated-connection-access-token" + +class AsyncStorageValue(TypedDict): + context: Any + connection: str + scopes: list[str] + current_scopes: Optional[list[str]] + credentials: Optional[TokenResponse] + +_local_storage: contextvars.ContextVar[Optional[AsyncStorageValue]] = contextvars.ContextVar("local_storage", default=None) + +def _get_local_storage() -> AsyncStorageValue: + store = _local_storage.get() + if store is None: + raise RuntimeError("The tool must be wrapped with the with_token_vault function.") + return store + +def _update_local_storage(data: AsyncStorageValue) -> None: + store = _get_local_storage() + updated = store.copy() + updated.update(data) + _local_storage.set(updated) + +@asynccontextmanager +async def _run_with_local_storage(data: AsyncStorageValue): + if _local_storage.get() is not None: + raise RuntimeError("Cannot nest tool calls that require Token Vault authorization.") + token = _local_storage.set(data) + try: + yield + finally: + _local_storage.reset(token) + +def get_credentials_from_token_vault() -> TokenResponse | None: + store = _get_local_storage() + return store.get("credentials") + +def get_access_token_from_token_vault() -> str | None: + store = _get_local_storage() + return store.get("credentials", {}).get("access_token") + +class TokenVaultAuthorizerParams(Generic[ToolInput]): + def __init__( + self, + scopes: list[str], + connection: str, + refresh_token: Optional[Union[ + AuthorizerToolParameter[ToolInput, str | None], + Callable[ToolInput, Union[str | None, Awaitable[str | None]]], + str | None, + ]] = None, + access_token: Optional[Union[ + AuthorizerToolParameter[ToolInput, str | None], + Callable[ToolInput, Union[str | None, Awaitable[str | None]]], + str | None, + ]] = None, + login_hint: Optional[str] = None, + store: Optional[Store] = None, + credentials_context: Optional[AuthContext] = "thread" + ): + """ + Parameters for the Token Vault authorizer. + + Args: + scopes: The scopes required in the access token of the Token Vault provider. + connection: The connection name of the Token Vault provider. + refresh_token: Optional. The Auth0 refresh token to exchange for a Token Vault access token. Can be: + - A string or None + - A callable that receives the tool input and returns the user refresh token (sync or async) + access_token: Optional. The Auth0 user access token (subject token) to exchange instead of a refresh token. Can be: + - A string or None + - A callable that receives the tool input and returns the user access token (sync or async) + login_hint: Optional string hint (e.g. subject/sub) to direct which linked account to use when multiple exist. + store: Optional. A store used to temporarily store the authorization response data while the user completes authorization on another device (default: InMemoryStore). + credentials_context: Optional. Defines the scope of credential sharing. Can be: + - "thread" (default): Credentials are shared across all tools using the same authorizer within the current thread. + - "agent": Credentials are shared globally across all threads and tools in the agent. + - "tool": Credentials are shared across multiple calls to the same tool within the same thread. + - "tool-call": Credentials are valid only for a single invocation of the tool. + """ + def wrap(val, result_type): + if isinstance(val, AuthorizerToolParameter): + return val + return AuthorizerToolParameter[ToolInput, result_type](val) + self.scopes = scopes + self.connection = connection + self.refresh_token = wrap(refresh_token, str | None) + self.access_token = wrap(access_token, str | None) + self.login_hint = login_hint + self.store = store + self.credentials_context = credentials_context + +class TokenVaultAuthorizerBase(Generic[ToolInput]): + def __init__( + self, + params: TokenVaultAuthorizerParams[ToolInput], + config: Auth0ClientParams = None, + ): + self.params = params + auth0 = { + "domain": (config or {}).get("domain", os.getenv("AUTH0_DOMAIN")), + "client_id": (config or {}).get("client_id", os.getenv("AUTH0_CLIENT_ID")), + "client_secret": (config or {}).get("client_secret", os.getenv("AUTH0_CLIENT_SECRET")), + "client_assertion_signing_key": (config or {}).get("client_assertion_signing_key"), + "client_assertion_signing_alg": (config or {}).get("client_assertion_signing_alg"), + "telemetry": (config or {}).get("telemetry"), + "timeout": (config or {}).get("timeout"), + "protocol": (config or {}).get("protocol") + } + + # Remove keys with None values + self.auth0 = {k: v for k, v in auth0.items() if v is not None} + self.get_token = GetToken(**self.auth0) + + # TODO: consider moving this to Auth0AI classes + sub_store = SubStore(params.store or InMemoryStore()).create_sub_store("AUTH0_AI_TOKEN_VAULT") + instance_id = self._get_instance_id() + + self.credentials_store = SubStore[TokenResponse](sub_store, { + "base_namespace": [instance_id, "credentials"], + "get_ttl": lambda credential: credential["expires_in"] * 1000 if "expires_in" in credential else None + }) + + has_refresh = params.refresh_token.value is not None + has_access = params.access_token.value is not None + + # Normalize empty strings to None before validation + if has_refresh and isinstance(params.refresh_token.value, str) and params.refresh_token.value.strip() == "": + params.refresh_token.value = None + has_refresh = False + if has_access and isinstance(params.access_token.value, str) and params.access_token.value.strip() == "": + params.access_token.value = None + has_access = False + + if (has_refresh and has_access) or (not has_refresh and not has_access): + raise ValueError( + "Exactly one of refresh_token or access_token must be provided to initialize the Authorizer." + ) + + def _handle_authorization_interrupts(self, err: Auth0Interrupt) -> None: + raise err + + def _get_instance_id(self) -> str: + props = { + "auth0": omit(self.auth0, ["client_secret", "client_assertion_signing_key"]), + "params": omit(self.params, ["store", "refresh_token", "access_token", "login_hint"]) + } + sh = json.dumps(props, sort_keys=True, separators=(",", ":")) + return hashlib.md5(sh.encode("utf-8")).hexdigest() + + def validate_token(self, token_response: Optional[TokenResponse] = None): + store = _get_local_storage() + scopes = store["scopes"] + connection = store["connection"] + + if token_response is None: + raise TokenVaultInterrupt( + f"Authorization required to access the Token Vault connection: {connection}", + connection, + scopes, + scopes + ) + + current_scopes = token_response["scope"] + missing_scopes = [s for s in scopes if s not in current_scopes] + _update_local_storage({"current_scopes": current_scopes}) + + if missing_scopes: + granted_union = sorted(set(current_scopes) | set(scopes)) + raise TokenVaultInterrupt( + f"Authorization required to access the Token Vault connection: {connection}. Missing scopes: {', '.join(missing_scopes)}", + connection, + scopes, + granted_union + ) + + async def get_access_token_impl(self, *args: ToolInput.args, **kwargs: ToolInput.kwargs) -> TokenResponse | None: + store = _get_local_storage() + connection = store["connection"] + + refresh_supplied = self.params.refresh_token.value is not None + + subject_token_type: str + if refresh_supplied: + subject_token_type = SUBJECT_TYPE_REFRESH_TOKEN + subject_token = await self.get_refresh_token(*args, **kwargs) + else: + subject_token_type = SUBJECT_TYPE_ACCESS_TOKEN + subject_token = await self.get_user_access_token(*args, **kwargs) + + if not subject_token: + return None + + # login_hint optionally applied to both refresh and access token exchange paths + login_hint = self.params.login_hint + try: + request_kwargs = dict( + subject_token_type=subject_token_type, + subject_token=subject_token, + requested_token_type=REQUESTED_TOKEN_TYPE_TOKEN_VAULT_ACCESS_TOKEN, + connection=connection, + ) + if login_hint: + request_kwargs["login_hint"] = login_hint + response = self.get_token.access_token_for_connection(**request_kwargs) + return TokenResponse( + access_token=response["access_token"], + expires_in=response["expires_in"], + scope=response.get("scope", "").split(), + token_type=response.get("token_type"), + id_token=response.get("id_token"), + refresh_token=response.get("refresh_token"), + ) + except Auth0Error as err: + raise TokenVaultError(err.message) if 400 <= err.status_code <= 499 else err + + async def get_refresh_token(self, *args: ToolInput.args, **kwargs: ToolInput.kwargs): + token = await self.params.refresh_token.resolve(*args, **kwargs) + if token is not None and isinstance(token, str) and token.strip() == "": + return None + return token + + async def get_user_access_token(self, *args: ToolInput.args, **kwargs: ToolInput.kwargs): + token = await self.params.access_token.resolve(*args, **kwargs) + if token is not None and isinstance(token, str) and token.strip() == "": + return None + return token + + def protect( + self, + get_context: ContextGetter[ToolInput], + execute: Callable[ToolInput, any] + ) -> Callable[ToolInput, any]: + async def wrapped_execute(*args: ToolInput.args, **kwargs: ToolInput.kwargs): + context = get_context(*args, **kwargs) + local_store = { + "context": context, + "scopes": self.params.scopes, + "connection": self.params.connection + } + + async with _run_with_local_storage(local_store): + credentials_ns = ns_from_context(self.params.credentials_context, context) + + try: + credentials = await self.credentials_store.get(credentials_ns, "credential") + + if not credentials: + credentials = await self.get_access_token_impl(*args, **kwargs) + self.validate_token(credentials) + await self.credentials_store.put(credentials_ns, "credential", credentials) + + _update_local_storage({"credentials": credentials}) + + if inspect.iscoroutinefunction(execute): + return await execute(*args, **kwargs) + else: + return execute(*args, **kwargs) + except TokenVaultError as err: + self.credentials_store.delete(credentials_ns, "credential") + interrupt = TokenVaultInterrupt( + str(err), + local_store["connection"], + local_store["scopes"], + local_store["scopes"] + ) + return self._handle_authorization_interrupts(interrupt) + except Auth0Interrupt as err: + self.credentials_store.delete(credentials_ns, "credential") + return self._handle_authorization_interrupts(err) + + return wrapped_execute \ No newline at end of file diff --git a/temp-packages/auth0-ai/auth0_ai/authorizers/types.py b/temp-packages/auth0-ai/auth0_ai/authorizers/types.py new file mode 100644 index 0000000..7bcae03 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/authorizers/types.py @@ -0,0 +1,43 @@ +import asyncio +from typing import Generic, TypedDict, Optional, Union, Tuple, Callable, TypeVar, Awaitable, ParamSpec + +class Auth0ClientParams(TypedDict): + """ + Base authorizer parameters. + + Attributes: + domain (str): The domain of your Auth0 tenant. + client_id (str): Your application's client ID. + client_secret (str, optional): Your application's client secret. + client_assertion_signing_key (str, optional): Private key used to sign the client assertion JWT. + client_assertion_signing_alg (str, optional): Algorithm used to sign the client assertion JWT (defaults to 'RS256'). + telemetry (bool, optional): Enable or disable telemetry (defaults to True). + timeout (float or tuple, optional): Change the requests connect and read timeout. Pass a tuple to specify both values separately or a float to set both to it (defaults to 5.0 for both). + protocol (str, optional): Useful for testing (defaults to 'https'). + """ + domain: Optional[str] + client_id: Optional[str] + client_secret: Optional[str] + client_assertion_signing_key: Optional[str] + client_assertion_signing_alg: Optional[str] + telemetry: Optional[bool] + timeout: Optional[Union[float, Tuple[float, float]]] + protocol: Optional[str] + +ToolInput = ParamSpec("ToolInput") +TResult = TypeVar("TResult") + +class AuthorizerToolParameter(Generic[ToolInput, TResult]): + def __init__(self, value: Union[ + TResult, + Callable[ToolInput, Union[TResult, Awaitable[TResult]]] + ]): + self.value = value + + async def resolve( + self, + *args: ToolInput.args, + **kwargs: ToolInput.kwargs, + ) -> TResult: + result = self.value(*args, **kwargs) if callable(self.value) else self.value + return await result if asyncio.iscoroutine(result) else result diff --git a/temp-packages/auth0-ai/auth0_ai/credentials.py b/temp-packages/auth0-ai/auth0_ai/credentials.py new file mode 100644 index 0000000..09516ff --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/credentials.py @@ -0,0 +1,9 @@ +from typing import TypedDict, Optional + +class TokenResponse(TypedDict): + access_token: str + expires_in: int + scope: list[str] + token_type: Optional[str] + id_token: Optional[str] + refresh_token: Optional[str] diff --git a/temp-packages/auth0-ai/auth0_ai/interrupts/__init__.py b/temp-packages/auth0-ai/auth0_ai/interrupts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/temp-packages/auth0-ai/auth0_ai/interrupts/async_authorization_interrupts.py b/temp-packages/auth0-ai/auth0_ai/interrupts/async_authorization_interrupts.py new file mode 100644 index 0000000..752a40f --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/interrupts/async_authorization_interrupts.py @@ -0,0 +1,104 @@ +from abc import ABC +from typing import Any, Type, TypeVar, get_type_hints +from auth0_ai.interrupts.auth0_interrupt import Auth0Interrupt +from auth0_ai.authorizers.async_authorization import AsyncAuthorizationRequest + +class WithRequestData: + def __init__(self, request: AsyncAuthorizationRequest): + self._request = request + + @property + def request(self) -> AsyncAuthorizationRequest: + return self._request + +AsyncAuthorizationInterruptType = TypeVar("T", bound="AsyncAuthorizationInterrupt") + +class AsyncAuthorizationInterrupt(Auth0Interrupt, ABC): + def __init__(self, message: str, code: str): + super().__init__(message, code) + + @classmethod + def is_interrupt(cls: Type[AsyncAuthorizationInterruptType], interrupt: Any) -> bool: + return ( + interrupt + and Auth0Interrupt.is_interrupt(interrupt) + and isinstance(interrupt["code"], str) + and ( + (hasattr(cls, "code") and getattr(cls, "code") == interrupt["code"]) + or + (not hasattr(cls, "code") and interrupt["code"].startswith("ASYNC_AUTHORIZATION_")) + ) + ) + + @classmethod + def has_request_data(cls, interrupt: Any) -> bool: + if not cls.is_interrupt(interrupt): + return False + + if not isinstance(interrupt, dict): + return False + + request = interrupt.get("_request") + if not isinstance(request, dict): + return False + + required_keys = set(get_type_hints(AsyncAuthorizationRequest).keys()) + return required_keys <= request.keys() + + +class AccessDeniedInterrupt(AsyncAuthorizationInterrupt, WithRequestData): + code: str = "ASYNC_AUTHORIZATION_ACCESS_DENIED" + + def __init__(self, message: str, request: AsyncAuthorizationRequest): + AsyncAuthorizationInterrupt.__init__(self, message, AccessDeniedInterrupt.code) + WithRequestData.__init__(self, request) + + +class UserDoesNotHavePushNotificationsInterrupt(AsyncAuthorizationInterrupt): + code: str = "ASYNC_AUTHORIZATION_USER_DOES_NOT_HAVE_PUSH_NOTIFICATIONS" + + def __init__(self, message: str): + super().__init__(message, UserDoesNotHavePushNotificationsInterrupt.code) + + +class AuthorizationRequestExpiredInterrupt(AsyncAuthorizationInterrupt, WithRequestData): + code: str = "ASYNC_AUTHORIZATION_REQUEST_EXPIRED" + + def __init__(self, message: str, request: AsyncAuthorizationRequest): + AsyncAuthorizationInterrupt.__init__(self, message, AuthorizationRequestExpiredInterrupt.code) + WithRequestData.__init__(self, request) + + +class AuthorizationPendingInterrupt(AsyncAuthorizationInterrupt, WithRequestData): + code: str = "ASYNC_AUTHORIZATION_PENDING" + + def __init__(self, message: str, request: AsyncAuthorizationRequest): + AsyncAuthorizationInterrupt.__init__(self, message, AuthorizationPendingInterrupt.code) + WithRequestData.__init__(self, request) + + def next_retry_interval(self) -> int: + """Return the interval in seconds to wait before the next retry attempt.""" + return self.request["interval"] + + +class AuthorizationPollingInterrupt(AsyncAuthorizationInterrupt, WithRequestData): + code: str = "ASYNC_AUTHORIZATION_POLLING_ERROR" + + def __init__(self, message: str, request: AsyncAuthorizationRequest, retry_after: int = None): + Auth0Interrupt.__init__(self, message, AuthorizationPollingInterrupt.code) + WithRequestData.__init__(self, request) + self.retry_after = retry_after + + def next_retry_interval(self) -> int: + """Return the interval in seconds to wait before the next retry attempt.""" + # Use the retry_after value from the HTTP header if available, + # otherwise fall back to the original interval from the auth request + return self.retry_after if self.retry_after is not None else self.request["interval"] + + +class InvalidGrantInterrupt(AsyncAuthorizationInterrupt, WithRequestData): + code: str = "ASYNC_AUTHORIZATION_INVALID_GRANT" + + def __init__(self, message: str, request: AsyncAuthorizationRequest): + Auth0Interrupt.__init__(self, message, InvalidGrantInterrupt.code) + WithRequestData.__init__(self, request) diff --git a/temp-packages/auth0-ai/auth0_ai/interrupts/auth0_interrupt.py b/temp-packages/auth0-ai/auth0_ai/interrupts/auth0_interrupt.py new file mode 100644 index 0000000..4478656 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/interrupts/auth0_interrupt.py @@ -0,0 +1,39 @@ +from typing import Final, Type, TypeVar, Dict, Any + +Auth0InterruptType = TypeVar("T", bound="Auth0Interrupt") + +class Auth0Interrupt(Exception): + _name: Final[str] = "AUTH0_AI_INTERRUPT" + + def __init__(self, message: str, code: str): + super().__init__(message) + self.code = code + + @property + def name(self) -> str: + return self._name + + def to_json(self) -> Dict[str, Any]: + """ + Serialize the interrupt to a JSON object. + """ + return { + key: value for key, value in self.__dict__.items() + } | {"message": self.args[0], "name": self.name} + + @classmethod + def is_interrupt(cls: Type[Auth0InterruptType], interrupt: Any) -> bool: + """ + Checks if an interrupt is of a specific type asserting its data component. + """ + if isinstance(interrupt, dict): + return ( + interrupt.get("name") == "AUTH0_AI_INTERRUPT" + and (not hasattr(cls, "code") or interrupt.get("code") == getattr(cls, "code", None)) + ) + + return ( + isinstance(interrupt, Auth0Interrupt) + and interrupt.name == "AUTH0_AI_INTERRUPT" + and (not hasattr(cls, "code") or interrupt.code == getattr(cls, "code", None)) + ) diff --git a/temp-packages/auth0-ai/auth0_ai/interrupts/token_vault_interrupt.py b/temp-packages/auth0-ai/auth0_ai/interrupts/token_vault_interrupt.py new file mode 100644 index 0000000..1e16db1 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/interrupts/token_vault_interrupt.py @@ -0,0 +1,61 @@ +from typing import Final +from auth0_ai.interrupts.auth0_interrupt import Auth0Interrupt + +class TokenVaultInterrupt(Auth0Interrupt): + """ + Error thrown when a tool call requires an access token for an external service. + + Throw this error if the service returns Unauthorized for the current access token. + """ + + code: Final[str] = "TOKEN_VAULT_ERROR" + + def __init__(self, message: str, connection: str, scopes: list[str], required_scopes: list[str]): + """ + Initializes a TokenVaultInterrupt instance. + + Args: + message (str): Error message describing the reason for the interrupt. + connection (str): The Auth0 connection name. + scopes (list[str]): The scopes required to access the external service as stated in the authorizer. + required_scopes (list[str]): The union between the current scopes of the Access Token plus the required scopes. + This is the list of scopes that will be used to request a new Access Token. + """ + super().__init__(message, self.code) + self.connection = connection + self.scopes = scopes + self.required_scopes = required_scopes + + def __copy__(self): + return type(self)( + self.args[0], + self.connection, + self.scopes, + self.required_scopes + ) + + def __deepcopy__(self, memo): + import copy + return type(self)( + copy.deepcopy(self.args[0], memo), + copy.deepcopy(self.connection, memo), + copy.deepcopy(self.scopes, memo), + copy.deepcopy(self.required_scopes, memo), + ) + + +class TokenVaultError(Exception): + """ + Error thrown when a tool call requires an access token for an external service. + + The authorizer will automatically convert this class of error to TokenVaultInterrupt. + """ + + def __init__(self, message: str): + """ + Initializes a TokenVaultError instance. + + Args: + message (str): Error message describing the reason for the error. + """ + super().__init__(message) diff --git a/temp-packages/auth0-ai/auth0_ai/stores/__init__.py b/temp-packages/auth0-ai/auth0_ai/stores/__init__.py new file mode 100644 index 0000000..359f4e1 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/stores/__init__.py @@ -0,0 +1,4 @@ +from .store import Store as Store, StorePutOptions as StorePutOptions +from .sub_store import SubStore as SubStore +from .impl.in_memory_store import InMemoryStore as InMemoryStore +from .impl.fs_store import FSStore as FSStore diff --git a/temp-packages/auth0-ai/auth0_ai/stores/impl/fs_store.py b/temp-packages/auth0-ai/auth0_ai/stores/impl/fs_store.py new file mode 100644 index 0000000..8b70d22 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/stores/impl/fs_store.py @@ -0,0 +1,125 @@ +import asyncio +import json +import time +from pathlib import Path +from typing import Any, Dict, Generic, Optional, Sequence, TypeVar + +T = TypeVar("T") + +class FSStore(Generic[T]): + """ + A file-backed key-value store with TTL support and debounced persistence. + Use for dev/demo purposes only. + """ + + def __init__(self, filepath: str, debounce_ms: int = 100): + """ + Initialize the FSStore. + + Args: + filepath (str): Path to the backing JSON file. + debounce_ms (int): Milliseconds to debounce writes. Defaults to 100ms. + """ + self._filepath = Path(filepath).resolve() + self._store: Dict[str, tuple[T, Optional[float]]] = {} + self._lock = asyncio.Lock() + self._persist_task: Optional[asyncio.TimerHandle] = None + self._loop = asyncio.get_running_loop() + self._debounce_delay = debounce_ms / 1000 # seconds + self._load_task = asyncio.create_task(self._load()) + + def _make_key(self, namespace: Sequence[str], key: str) -> str: + return "/".join(namespace) + "/" + key + + async def _load(self) -> None: + try: + if not self._filepath.exists(): + return + + def _read(): + return self._filepath.read_text(encoding="utf-8") + + raw = await asyncio.to_thread(_read) + data = json.loads(raw) + now = time.time() * 1000 + + for k, entry in data.items(): + value = entry["value"] + expires_at = entry.get("expiresAt") + if expires_at is None or expires_at > now: + self._store[k] = (value, expires_at) + except Exception as e: + print(f"[FSStore] Failed to load: {e}") + + async def get(self, namespace: Sequence[str], key: str) -> T | None: + await self._load_task + full_key = self._make_key(namespace, key) + + async with self._lock: + entry = self._store.get(full_key) + if not entry: + return None + + value, expires_at = entry + now = time.time() * 1000 + + if expires_at is not None and now >= expires_at: + del self._store[full_key] + self._debounced_persist() + return None + + return value + + async def delete(self, namespace: Sequence[str], key: str) -> None: + await self._load_task + full_key = self._make_key(namespace, key) + + async with self._lock: + if full_key in self._store: + del self._store[full_key] + self._debounced_persist() + + async def put( + self, + namespace: Sequence[str], + key: str, + value: T, + options: Optional[Dict[str, Any]] = None + ) -> None: + await self._load_task + full_key = self._make_key(namespace, key) + expires_in = options.get("expires_in") if options else None + expires_at = time.time() * 1000 + expires_in if expires_in is not None else None + + async with self._lock: + self._store[full_key] = (value, expires_at) + self._debounced_persist() + + def _debounced_persist(self) -> None: + if self._persist_task: + self._persist_task.cancel() + + self._persist_task = self._loop.call_later( + self._debounce_delay, lambda: asyncio.create_task(self._persist()) + ) + + async def _persist(self) -> None: + async with self._lock: + data: Dict[str, Dict[str, Any]] = {} + now = time.time() * 1000 + + for k, (value, expires_at) in self._store.items(): + if expires_at is None or expires_at > now: + data[k] = { + "value": value, + "expiresAt": expires_at + } + + def _write(): + self._filepath.parent.mkdir(parents=True, exist_ok=True) + self._filepath.write_text(json.dumps(data, indent=2), encoding="utf-8") + + try: + await asyncio.to_thread(_write) + except Exception as e: + print(f"[FSStore] Failed to persist: {e}") diff --git a/temp-packages/auth0-ai/auth0_ai/stores/impl/in_memory_store.py b/temp-packages/auth0-ai/auth0_ai/stores/impl/in_memory_store.py new file mode 100644 index 0000000..766f0fe --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/stores/impl/in_memory_store.py @@ -0,0 +1,55 @@ +import asyncio +import time +from typing import Dict, TypeVar, Sequence +from auth0_ai.stores.store import Store, StorePutOptions + +T = TypeVar("T") + +class InMemoryStore(Store[T]): + """ + An in-memory store for dev/demo purposes. + """ + + def __init__(self): + self._store: Dict[str, tuple[T, float | None]] = {} + self._lock = asyncio.Lock() + + def _get_key(self, namespace: Sequence[str], key: str) -> str: + return "/".join(namespace) + "/" + key + + async def get(self, namespace: Sequence[str], key: str) -> T | None: + store_key = self._get_key(namespace, key) + + async with self._lock: + item = self._store.get(store_key) + if item is None: + return None + + value, expires_at = item + now = time.time() * 1000 # milliseconds + + if expires_at is not None and now >= expires_at: + del self._store[store_key] + return None + + return value + + async def delete(self, namespace: Sequence[str], key: str) -> None: + store_key = self._get_key(namespace, key) + + async with self._lock: + self._store.pop(store_key, None) + + async def put( + self, + namespace: Sequence[str], + key: str, + value: T, + options: StorePutOptions | None = None + ) -> None: + store_key = self._get_key(namespace, key) + expires_in = options["expires_in"] if options and options.get("expires_in") is not None else None + expires_at = time.time() * 1000 + expires_in if expires_in is not None else None + + async with self._lock: + self._store[store_key] = (value, expires_at) diff --git a/temp-packages/auth0-ai/auth0_ai/stores/store.py b/temp-packages/auth0-ai/auth0_ai/stores/store.py new file mode 100644 index 0000000..9e0de65 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/stores/store.py @@ -0,0 +1,67 @@ +from abc import ABC, abstractmethod +from typing import Generic, Optional, TypeVar, Sequence, TypedDict + +T = TypeVar("T") + +class StorePutOptions(TypedDict): + """ + Options for storing a value in the store. + + Attributes: + expires_in (int, optional): The time in milliseconds after which the value expires. If None, the value does not expire. + """ + expires_in: Optional[int] + +class Store(ABC, Generic[T]): + """ + A key-value store interface. + + Auth0AI uses this store in different stages: + - To store the authorization request when an AI agent is interrupted (Async Authorization). + - To store user credentials associated with threads to avoid re-authentication (Async Authorization, Token Vault). + """ + + @abstractmethod + async def get(self, namespace: Sequence[str], key: str) -> T | None: + """ + Get a value from the store. + + Args: + namespace (Sequence[str]): The namespace of the key. + key (str): The key. + + Returns: + Optional[T]: The stored value, or None if not found. + """ + pass + + @abstractmethod + async def delete(self, namespace: Sequence[str], key: str) -> None: + """ + Delete a value from the store. + + Args: + namespace (Sequence[str]): The namespace of the key. + key (str): The key. + """ + pass + + @abstractmethod + async def put( + self, + namespace: Sequence[str], + key: str, + value: T, + options: Optional[StorePutOptions] = None + ) -> None: + """ + Put a value in the store. + + Args: + namespace (Sequence[str]): The namespace of the key. + key (str): The key. + value (T): The value to store. + options (StorePutOptions, optional): Options for storing the value. Includes: + - expires_in (int, optional): Time in milliseconds before the value expires. If None, it doesn't expire. + """ + pass diff --git a/temp-packages/auth0-ai/auth0_ai/stores/sub_store.py b/temp-packages/auth0-ai/auth0_ai/stores/sub_store.py new file mode 100644 index 0000000..2036b16 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/stores/sub_store.py @@ -0,0 +1,76 @@ +from typing import Any, Callable, Generic, Optional, Sequence, TypeVar, TypedDict, Union +from auth0_ai.stores.store import Store, StorePutOptions + +T = TypeVar("T") +TNew = TypeVar("TNew") + +class SubStoreParams(TypedDict, total=False): + base_namespace: Sequence[str] + get_ttl: Callable[[T], int | None] + +class SubStore(Generic[T], Store[T]): + """ + A store that wraps a parent store, optionally prefixing namespaces and deriving TTL values from a user-defined function. + """ + + def __init__(self, parent: Store[Any], options: Optional[SubStoreParams[T]] = None): + if parent is None: + raise ValueError("Parent store is required") + + self._parent = parent + self._base_namespace = options["base_namespace"] if options and "base_namespace" in options else [] + self._get_ttl = options["get_ttl"] if options and "get_ttl" in options else None + + def _full_namespace(self, namespace: Sequence[str]) -> list[str]: + return list(self._base_namespace) + list(namespace) + + async def get(self, namespace: Sequence[str], key: str) -> T | None: + return await self._parent.get(self._full_namespace(namespace), key) + + async def delete(self, namespace: Sequence[str], key: str) -> None: + await self._parent.delete(self._full_namespace(namespace), key) + + async def put( + self, + namespace: Sequence[str], + key: str, + value: T, + options: Optional[StorePutOptions] = None + ) -> None: + expires_in = ( + options["expires_in"] if options and "expires_in" in options else + self._get_ttl(value) if self._get_ttl else None + ) + + put_options = {"expires_in": expires_in} if expires_in is not None else None + + await self._parent.put( + self._full_namespace(namespace), + key, + value, + put_options + ) + + def create_sub_store( + self, + options: Union[ + str, + Sequence[str], + SubStoreParams[TNew] + ] = None + ) -> "SubStore[TNew]": + base_namespace: Optional[Sequence[str]] = None + get_ttl: Optional[Callable[[TNew], int | None]] = None + + if isinstance(options, str): + base_namespace = [options] + elif isinstance(options, list): + base_namespace = options + elif isinstance(options, dict): + base_namespace = options.get("base_namespace") + get_ttl = options.get("get_ttl") + + return SubStore[TNew](self, { + "base_namespace": base_namespace or [], + "get_ttl": get_ttl + }) diff --git a/temp-packages/auth0-ai/auth0_ai/utils.py b/temp-packages/auth0-ai/auth0_ai/utils.py new file mode 100644 index 0000000..091e903 --- /dev/null +++ b/temp-packages/auth0-ai/auth0_ai/utils.py @@ -0,0 +1,20 @@ +from typing import Dict, Iterable, TypeVar, Union, Any + +K = TypeVar("K") +V = TypeVar("V") + +def omit(obj: Union[Dict[K, V], Any], keys: Iterable[K]) -> Dict[K, V]: + """Returns a new dict omitting the specified keys. + + Supports both dictionaries and objects with a __dict__ attribute. + If the object does not have a __dict__, raises a TypeError. + """ + keys_set = set(keys) + + if isinstance(obj, dict): + return {k: v for k, v in obj.items() if k not in keys_set} + + if hasattr(obj, "__dict__"): + return {k: v for k, v in vars(obj).items() if k not in keys_set} + + raise TypeError("omit() expects a dict or an object with a __dict__ attribute.") diff --git a/temp-packages/auth0-ai/poetry.lock b/temp-packages/auth0-ai/poetry.lock new file mode 100644 index 0000000..f6f9a6f --- /dev/null +++ b/temp-packages/auth0-ai/poetry.lock @@ -0,0 +1,1655 @@ +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, + {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, +] + +[[package]] +name = "aiohttp" +version = "3.11.18" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4"}, + {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6"}, + {file = "aiohttp-3.11.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868"}, + {file = "aiohttp-3.11.18-cp310-cp310-win32.whl", hash = "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f"}, + {file = "aiohttp-3.11.18-cp310-cp310-win_amd64.whl", hash = "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd"}, + {file = "aiohttp-3.11.18-cp311-cp311-win32.whl", hash = "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d"}, + {file = "aiohttp-3.11.18-cp311-cp311-win_amd64.whl", hash = "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea"}, + {file = "aiohttp-3.11.18-cp312-cp312-win32.whl", hash = "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8"}, + {file = "aiohttp-3.11.18-cp312-cp312-win_amd64.whl", hash = "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7"}, + {file = "aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78"}, + {file = "aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935"}, + {file = "aiohttp-3.11.18-cp39-cp39-win32.whl", hash = "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc"}, + {file = "aiohttp-3.11.18-cp39-cp39-win_amd64.whl", hash = "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef"}, + {file = "aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" +aiosignal = ">=1.1.2" +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] + +[[package]] +name = "aiosignal" +version = "1.3.2" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "attrs" +version = "25.3.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] + +[package.extras] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] + +[[package]] +name = "auth0-python" +version = "4.13.0" +description = "" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "auth0_python-4.13.0-py3-none-any.whl", hash = "sha256:8e3266fcfc2e3cc4f477e01f964c0a6c9a3563653a2feb226355bc825cd4932c"}, + {file = "auth0_python-4.13.0.tar.gz", hash = "sha256:72f58bd26b078e3b493e4d24928cc75fa41842aae35cef488ed6f8db0fb701fb"}, +] + +[package.dependencies] +aiohttp = ">=3.10.11" +cryptography = ">=43.0.1" +pyjwt = ">=2.8.0" +requests = ">=2.32.3" +urllib3 = ">=2.2.3" + +[[package]] +name = "backports-tarfile" +version = "1.2.0" +description = "Backport of CPython tarfile module" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version == \"3.11\"" +files = [ + {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, + {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test", "pytest (!=8.0.*)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)"] + +[[package]] +name = "build" +version = "1.2.2.post1" +description = "A simple, correct Python build frontend" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, + {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "os_name == \"nt\""} +packaging = ">=19.1" +pyproject_hooks = "*" + +[package.extras] +docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] +test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0) ; python_version < \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.11\"", "setuptools (>=67.8.0) ; python_version >= \"3.12\"", "wheel (>=0.36.0)"] +typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] +uv = ["uv (>=0.1.18)"] +virtualenv = ["virtualenv (>=20.0.35)"] + +[[package]] +name = "certifi" +version = "2025.4.26" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] +markers = {main = "platform_python_implementation != \"PyPy\"", dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\""} + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main"] +markers = "os_name == \"nt\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cryptography" +version = "44.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.7" +groups = ["main", "dev"] +files = [ + {file = "cryptography-44.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:962bc30480a08d133e631e8dfd4783ab71cc9e33d5d7c1e192f0b7c06397bb88"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc61e8f3bf5b60346d89cd3d37231019c17a081208dfbbd6e1605ba03fa137"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58968d331425a6f9eedcee087f77fd3c927c88f55368f43ff7e0a19891f2642c"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e28d62e59a4dbd1d22e747f57d4f00c459af22181f0b2f787ea83f5a876d7c76"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af653022a0c25ef2e3ffb2c673a50e5a0d02fecc41608f4954176f1933b12359"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:157f1f3b8d941c2bd8f3ffee0af9b049c9665c39d3da9db2dc338feca5e98a43"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:c6cd67722619e4d55fdb42ead64ed8843d64638e9c07f4011163e46bc512cf01"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b424563394c369a804ecbee9b06dfb34997f19d00b3518e39f83a5642618397d"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c91fc8e8fd78af553f98bc7f2a1d8db977334e4eea302a4bfd75b9461c2d8904"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:25cd194c39fa5a0aa4169125ee27d1172097857b27109a45fadc59653ec06f44"}, + {file = "cryptography-44.0.3-cp37-abi3-win32.whl", hash = "sha256:3be3f649d91cb182c3a6bd336de8b61a0a71965bd13d1a04a0e15b39c3d5809d"}, + {file = "cryptography-44.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:3883076d5c4cc56dbef0b898a74eb6992fdac29a7b9013870b34efe4ddb39a0d"}, + {file = "cryptography-44.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:5639c2b16764c6f76eedf722dbad9a0914960d3489c0cc38694ddf9464f1bb2f"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ffef566ac88f75967d7abd852ed5f182da252d23fac11b4766da3957766759"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:192ed30fac1728f7587c6f4613c29c584abdc565d7417c13904708db10206645"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7d5fe7195c27c32a64955740b949070f21cba664604291c298518d2e255931d2"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3f07943aa4d7dad689e3bb1638ddc4944cc5e0921e3c227486daae0e31a05e54"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb90f60e03d563ca2445099edf605c16ed1d5b15182d21831f58460c48bffb93"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ab0b005721cc0039e885ac3503825661bd9810b15d4f374e473f8c89b7d5460c"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3bb0847e6363c037df8f6ede57d88eaf3410ca2267fb12275370a76f85786a6f"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0cc66c74c797e1db750aaa842ad5b8b78e14805a9b5d1348dc603612d3e3ff5"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6866df152b581f9429020320e5eb9794c8780e90f7ccb021940d7f50ee00ae0b"}, + {file = "cryptography-44.0.3-cp39-abi3-win32.whl", hash = "sha256:c138abae3a12a94c75c10499f1cbae81294a6f983b3af066390adee73f433028"}, + {file = "cryptography-44.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:5d186f32e52e66994dce4f766884bcb9c68b8da62d61d9d215bfe5fb56d21334"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cad399780053fb383dc067475135e41c9fe7d901a97dd5d9c5dfb5611afc0d7d"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:21a83f6f35b9cc656d71b5de8d519f566df01e660ac2578805ab245ffd8523f8"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fc3c9babc1e1faefd62704bb46a69f359a9819eb0292e40df3fb6e3574715cd4"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:e909df4053064a97f1e6565153ff8bb389af12c5c8d29c343308760890560aff"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:dad80b45c22e05b259e33ddd458e9e2ba099c86ccf4e88db7bbab4b747b18d06"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:479d92908277bed6e1a1c69b277734a7771c2b78633c224445b5c60a9f4bc1d9"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:896530bc9107b226f265effa7ef3f21270f18a2026bc09fed1ebd7b66ddf6375"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9b4d4a5dbee05a2c390bf212e78b99434efec37b17a4bff42f50285c5c8c9647"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02f55fb4f8b79c1221b0961488eaae21015b69b210e18c386b69de182ebb1259"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dd3db61b8fe5be220eee484a17233287d0be6932d056cf5738225b9c05ef4fff"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:978631ec51a6bbc0b7e58f23b68a8ce9e5f09721940933e9c217068388789fe5"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5d20cc348cca3a8aa7312f42ab953a56e15323800ca3ab0706b8cd452a3a056c"}, + {file = "cryptography-44.0.3.tar.gz", hash = "sha256:fe19d8bc5536a91a24a8133328880a41831b6c5df54599a8417b62fe015d3053"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\""} + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0) ; python_version >= \"3.8\""] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2) ; python_version >= \"3.8\""] +pep8test = ["check-sdist ; python_version >= \"3.8\"", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +sdist = ["build (>=1.0.0)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "deprecated" +version = "1.2.18" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +files = [ + {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, + {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] + +[[package]] +name = "docutils" +version = "0.21.2" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, +] + +[[package]] +name = "frozenlist" +version = "1.6.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3"}, + {file = "frozenlist-1.6.0-cp310-cp310-win32.whl", hash = "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812"}, + {file = "frozenlist-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e"}, + {file = "frozenlist-1.6.0-cp311-cp311-win32.whl", hash = "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860"}, + {file = "frozenlist-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770"}, + {file = "frozenlist-1.6.0-cp312-cp312-win32.whl", hash = "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc"}, + {file = "frozenlist-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e"}, + {file = "frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4"}, + {file = "frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497"}, + {file = "frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f"}, + {file = "frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c"}, + {file = "frozenlist-1.6.0-cp39-cp39-win32.whl", hash = "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530"}, + {file = "frozenlist-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572"}, + {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, + {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, +] + +[[package]] +name = "id" +version = "1.5.0" +description = "A tool for generating OIDC identities" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658"}, + {file = "id-1.5.0.tar.gz", hash = "sha256:292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d"}, +] + +[package.dependencies] +requests = "*" + +[package.extras] +dev = ["build", "bump (>=1.3.2)", "id[lint,test]"] +lint = ["bandit", "interrogate", "mypy", "ruff (<0.8.2)", "types-requests"] +test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "importlib-metadata" +version = "8.6.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version == \"3.11\""} + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +description = "Utility functions for Python class constructs" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"}, + {file = "jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "jaraco-context" +version = "6.0.1" +description = "Useful decorators and context managers" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"}, + {file = "jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3"}, +] + +[package.dependencies] +"backports.tarfile" = {version = "*", markers = "python_version < \"3.12\""} + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["portend", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] + +[[package]] +name = "jaraco-functools" +version = "4.1.0" +description = "Functools like those found in stdlib" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "jaraco.functools-4.1.0-py3-none-any.whl", hash = "sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649"}, + {file = "jaraco_functools-4.1.0.tar.gz", hash = "sha256:70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.classes", "pytest (>=6,!=8.1.*)"] +type = ["pytest-mypy"] + +[[package]] +name = "jeepney" +version = "0.9.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\"" +files = [ + {file = "jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683"}, + {file = "jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732"}, +] + +[package.extras] +test = ["async-timeout ; python_version < \"3.11\"", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["trio"] + +[[package]] +name = "keyring" +version = "25.6.0" +description = "Store and access your passwords safely." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "keyring-25.6.0-py3-none-any.whl", hash = "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd"}, + {file = "keyring-25.6.0.tar.gz", hash = "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66"}, +] + +[package.dependencies] +importlib_metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} +"jaraco.classes" = "*" +"jaraco.context" = "*" +"jaraco.functools" = "*" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +completion = ["shtab (>=1.1.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["pyfakefs", "pytest (>=6,!=8.1.*)"] +type = ["pygobject-stubs", "pytest-mypy", "shtab", "types-pywin32"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "more-itertools" +version = "10.7.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" +files = [ + {file = "more_itertools-10.7.0-py3-none-any.whl", hash = "sha256:d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e"}, + {file = "more_itertools-10.7.0.tar.gz", hash = "sha256:9fddd5403be01a94b204faadcff459ec3568cf110265d3c54323e1e866ad29d3"}, +] + +[[package]] +name = "multidict" +version = "6.4.3" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5"}, + {file = "multidict-6.4.3-cp310-cp310-win32.whl", hash = "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e"}, + {file = "multidict-6.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7"}, + {file = "multidict-6.4.3-cp311-cp311-win32.whl", hash = "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378"}, + {file = "multidict-6.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a"}, + {file = "multidict-6.4.3-cp312-cp312-win32.whl", hash = "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124"}, + {file = "multidict-6.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8"}, + {file = "multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3"}, + {file = "multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4"}, + {file = "multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5"}, + {file = "multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df"}, + {file = "multidict-6.4.3-cp39-cp39-win32.whl", hash = "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f"}, + {file = "multidict-6.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897"}, + {file = "multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9"}, + {file = "multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec"}, +] + +[[package]] +name = "nh3" +version = "0.2.21" +description = "Python binding to Ammonia HTML sanitizer Rust crate" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "nh3-0.2.21-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:fcff321bd60c6c5c9cb4ddf2554e22772bb41ebd93ad88171bbbb6f271255286"}, + {file = "nh3-0.2.21-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eedcd7d08b0eae28ba47f43fd33a653b4cdb271d64f1aeda47001618348fde"}, + {file = "nh3-0.2.21-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d426d7be1a2f3d896950fe263332ed1662f6c78525b4520c8e9861f8d7f0d243"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9d67709bc0d7d1f5797b21db26e7a8b3d15d21c9c5f58ccfe48b5328483b685b"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:55823c5ea1f6b267a4fad5de39bc0524d49a47783e1fe094bcf9c537a37df251"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:818f2b6df3763e058efa9e69677b5a92f9bc0acff3295af5ed013da544250d5b"}, + {file = "nh3-0.2.21-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b3b5c58161e08549904ac4abd450dacd94ff648916f7c376ae4b2c0652b98ff9"}, + {file = "nh3-0.2.21-cp313-cp313t-win32.whl", hash = "sha256:637d4a10c834e1b7d9548592c7aad760611415fcd5bd346f77fd8a064309ae6d"}, + {file = "nh3-0.2.21-cp313-cp313t-win_amd64.whl", hash = "sha256:713d16686596e556b65e7f8c58328c2df63f1a7abe1277d87625dcbbc012ef82"}, + {file = "nh3-0.2.21-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a772dec5b7b7325780922dd904709f0f5f3a79fbf756de5291c01370f6df0967"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d002b648592bf3033adfd875a48f09b8ecc000abd7f6a8769ed86b6ccc70c759"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2a5174551f95f2836f2ad6a8074560f261cf9740a48437d6151fd2d4d7d617ab"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b8d55ea1fc7ae3633d758a92aafa3505cd3cc5a6e40470c9164d54dff6f96d42"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ae319f17cd8960d0612f0f0ddff5a90700fa71926ca800e9028e7851ce44a6f"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ca02ac6f27fc80f9894409eb61de2cb20ef0a23740c7e29f9ec827139fa578"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f77e62aed5c4acad635239ac1290404c7e940c81abe561fd2af011ff59f585"}, + {file = "nh3-0.2.21-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:087ffadfdcd497658c3adc797258ce0f06be8a537786a7217649fc1c0c60c293"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ac7006c3abd097790e611fe4646ecb19a8d7f2184b882f6093293b8d9b887431"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:6141caabe00bbddc869665b35fc56a478eb774a8c1dfd6fba9fe1dfdf29e6efa"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:20979783526641c81d2f5bfa6ca5ccca3d1e4472474b162c6256745fbfe31cd1"}, + {file = "nh3-0.2.21-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a7ea28cd49293749d67e4fcf326c554c83ec912cd09cd94aa7ec3ab1921c8283"}, + {file = "nh3-0.2.21-cp38-abi3-win32.whl", hash = "sha256:6c9c30b8b0d291a7c5ab0967ab200598ba33208f754f2f4920e9343bdd88f79a"}, + {file = "nh3-0.2.21-cp38-abi3-win_amd64.whl", hash = "sha256:bb0014948f04d7976aabae43fcd4cb7f551f9f8ce785a4c9ef66e6c2590f8629"}, + {file = "nh3-0.2.21.tar.gz", hash = "sha256:4990e7ee6a55490dbf00d61a6f476c9a3258e31e711e13713b2ea7d6616f670e"}, +] + +[[package]] +name = "openfga-sdk" +version = "0.9.5" +description = "A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "openfga_sdk-0.9.5-py3-none-any.whl", hash = "sha256:0a8e338a0c80b72e283edc6423e1869ee4884868fe41616b0e943c8aa74b0495"}, + {file = "openfga_sdk-0.9.5.tar.gz", hash = "sha256:75636dac99fb107aee570f5b11689d7b9d77b219f364586651f23301be0329ed"}, +] + +[package.dependencies] +aiohttp = ">=3.9.3,<4" +build = ">=1.2.1,<2" +opentelemetry-api = ">=1.25.0,<2" +python-dateutil = ">=2.9.0,<3" +setuptools = ">=69.1.1" +urllib3 = ">=1.26.19,<3" + +[[package]] +name = "opentelemetry-api" +version = "1.32.1" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "opentelemetry_api-1.32.1-py3-none-any.whl", hash = "sha256:bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724"}, + {file = "opentelemetry_api-1.32.1.tar.gz", hash = "sha256:a5be71591694a4d9195caf6776b055aa702e964d961051a0715d05f8632c32fb"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<8.7.0" + +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] + +[[package]] +name = "propcache" +version = "0.3.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, + {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, + {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, + {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, + {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, + {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, + {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, + {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, + {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, + {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, + {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, + {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, + {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, + {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, + {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, +] + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] +markers = {main = "platform_python_implementation != \"PyPy\"", dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\""} + +[[package]] +name = "pygments" +version = "2.19.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjwt" +version = "2.10.1" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +description = "Wrappers to call pyproject.toml-based build backend hooks." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, + {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"win32\"" +files = [ + {file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"}, + {file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"}, +] + +[[package]] +name = "readme-renderer" +version = "44.0" +description = "readme_renderer is a library for rendering readme descriptions for Warehouse" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151"}, + {file = "readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1"}, +] + +[package.dependencies] +docutils = ">=0.21.2" +nh3 = ">=0.2.14" +Pygments = ">=2.5.1" + +[package.extras] +md = ["cmarkgfm (>=0.8.0)"] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "rfc3986" +version = "2.0.0" +description = "Validating URI References per RFC 3986" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, + {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, +] + +[package.extras] +idna2008 = ["idna"] + +[[package]] +name = "rich" +version = "14.0.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +groups = ["dev"] +files = [ + {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"}, + {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "secretstorage" +version = "3.3.3" +description = "Python bindings to FreeDesktop.org Secret Service API" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\"" +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + +[[package]] +name = "setuptools" +version = "80.3.1" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-80.3.1-py3-none-any.whl", hash = "sha256:ea8e00d7992054c4c592aeb892f6ad51fe1b4d90cc6947cc45c45717c40ec537"}, + {file = "setuptools-80.3.1.tar.gz", hash = "sha256:31e2c58dbb67c99c289f51c16d899afedae292b978f8051efaf6262d8212f927"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "twine" +version = "6.1.0" +description = "Collection of utilities for publishing packages on PyPI" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "twine-6.1.0-py3-none-any.whl", hash = "sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384"}, + {file = "twine-6.1.0.tar.gz", hash = "sha256:be324f6272eff91d07ee93f251edf232fc647935dd585ac003539b42404a8dbd"}, +] + +[package.dependencies] +id = "*" +keyring = {version = ">=15.1", markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\""} +packaging = ">=24.0" +readme-renderer = ">=35.0" +requests = ">=2.20" +requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0" +rfc3986 = ">=1.4.0" +rich = ">=12.0.0" +urllib3 = ">=1.26.0" + +[package.extras] +keyring = ["keyring (>=15.1)"] + +[[package]] +name = "urllib3" +version = "2.4.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wrapt" +version = "1.17.2" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, + {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, + {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, + {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, + {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, + {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, + {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, + {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, + {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, + {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, + {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, + {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, + {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, + {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, + {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, + {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, + {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, +] + +[[package]] +name = "yarl" +version = "1.20.0" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19"}, + {file = "yarl-1.20.0-cp310-cp310-win32.whl", hash = "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d"}, + {file = "yarl-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5"}, + {file = "yarl-1.20.0-cp311-cp311-win32.whl", hash = "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6"}, + {file = "yarl-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b"}, + {file = "yarl-1.20.0-cp312-cp312-win32.whl", hash = "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64"}, + {file = "yarl-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384"}, + {file = "yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62"}, + {file = "yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f"}, + {file = "yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac"}, + {file = "yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0"}, + {file = "yarl-1.20.0-cp39-cp39-win32.whl", hash = "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8"}, + {file = "yarl-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7"}, + {file = "yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124"}, + {file = "yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.1" + +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] +markers = {dev = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version == \"3.11\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.1" +python-versions = "^3.11" +content-hash = "de26ec22af008b60277b664c932d868d2bfd15351e92ee2fc4e5ae6fbfb42e9c" diff --git a/temp-packages/auth0-ai/pyproject.toml b/temp-packages/auth0-ai/pyproject.toml new file mode 100644 index 0000000..3e91c70 --- /dev/null +++ b/temp-packages/auth0-ai/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "auth0-ai" +version = "1.0.0b3" +description = "This package provides base abstractions for authentication and authorization in AI applications." +license = "apache-2.0" +homepage = "https://auth0.com" +authors = ["Auth0 "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.11" +openfga-sdk = "^0.9.5" +auth0-python = "^4.13.0" + +[tool.poetry.group.dev.dependencies] +twine = "^6.1.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" From 4882eb8d352fbbc8bf76d14f2400f766b6b97366 Mon Sep 17 00:00:00 2001 From: "Patrick M. Riley" Date: Fri, 3 Oct 2025 16:52:48 -0400 Subject: [PATCH 2/6] feat: ts-langchain updates --- .gitignore | 1 - py-langchain/backend/app/agents/assistant0.py | 6 +- py-langchain/frontend/bun.lock | 4 +- py-langchain/frontend/eslint.config.js | 7 + py-langchain/frontend/package-lock.json | 7025 ----------------- py-langchain/frontend/package.json | 2 +- .../src/components/chat-message-bubble.tsx | 152 +- .../frontend/src/components/chat-window.tsx | 2 +- ts-langchain/.env.example | 5 + ts-langchain/.eslintrc.json | 34 +- ts-langchain/auth0-ai-0.0.0.tgz | Bin 0 -> 69902 bytes ts-langchain/auth0-ai-langchain-0.0.0.tgz | Bin 0 -> 31197 bytes ts-langchain/bun.lock | 311 +- ts-langchain/langgraph.json | 3 + ts-langchain/package.json | 17 +- .../src/app/api/chat/[..._path]/route.ts | 17 +- .../auth0-ai/FederatedConnections/index.tsx | 28 - .../TokenVaultAuthProps.tsx} | 2 +- .../TokenVaultInterruptHandler.tsx} | 12 +- .../components/auth0-ai/TokenVault/index.tsx | 28 + .../popup.tsx | 6 +- .../redirect.tsx | 6 +- .../src/components/chat-message-bubble.tsx | 135 +- ts-langchain/src/components/chat-window.tsx | 6 +- ts-langchain/src/lib/auth.ts | 101 + ts-langchain/src/lib/auth0-ai.ts | 50 +- ts-langchain/src/lib/auth0.ts | 24 +- ts-langchain/src/lib/tools/google-calender.ts | 4 +- ts-langchain/src/lib/tools/shop-online.ts | 4 +- ts-langchain/src/lib/tools/user-info.ts | 2 +- 30 files changed, 704 insertions(+), 7290 deletions(-) delete mode 100644 py-langchain/frontend/package-lock.json create mode 100644 ts-langchain/auth0-ai-0.0.0.tgz create mode 100644 ts-langchain/auth0-ai-langchain-0.0.0.tgz delete mode 100644 ts-langchain/src/components/auth0-ai/FederatedConnections/index.tsx rename ts-langchain/src/components/auth0-ai/{FederatedConnections/FederatedConnectionAuthProps.tsx => TokenVault/TokenVaultAuthProps.tsx} (95%) rename ts-langchain/src/components/auth0-ai/{FederatedConnections/FederatedConnectionInterruptHandler.tsx => TokenVault/TokenVaultInterruptHandler.tsx} (54%) create mode 100644 ts-langchain/src/components/auth0-ai/TokenVault/index.tsx rename ts-langchain/src/components/auth0-ai/{FederatedConnections => TokenVault}/popup.tsx (93%) rename ts-langchain/src/components/auth0-ai/{FederatedConnections => TokenVault}/redirect.tsx (86%) create mode 100644 ts-langchain/src/lib/auth.ts diff --git a/.gitignore b/.gitignore index d4e067c..195cd5b 100644 --- a/.gitignore +++ b/.gitignore @@ -65,7 +65,6 @@ dist/ downloads/ eggs/ .eggs/ -lib/ lib64/ parts/ sdist/ diff --git a/py-langchain/backend/app/agents/assistant0.py b/py-langchain/backend/app/agents/assistant0.py index 24e0dbe..2a98283 100644 --- a/py-langchain/backend/app/agents/assistant0.py +++ b/py-langchain/backend/app/agents/assistant0.py @@ -16,8 +16,10 @@ def get_prompt(): today_str = date.today().strftime('%Y-%m-%d') return ( f"You are a personal assistant named Assistant0. You are a helpful assistant that can answer questions and help with tasks. " - f"Today's date is {today_str}. You have access to a set of tools, use the tools as needed to answer the user's question. " - f"Render the email body as a markdown block, do not wrap it in code blocks." + f"You have access to a set of tools. When using tools, you MUST provide valid JSON arguments. Always format tool call arguments as proper JSON objects. " + f"For example, when calling shop_online tool, format like this: " + f'{{"product": "iPhone", "qty": 1, "priceLimit": 1000}} ' + f"Use the tools as needed to answer the user's question. Render the email body as a markdown block, do not wrap it in code blocks. Today is {today_str}." ) agent = create_react_agent( diff --git a/py-langchain/frontend/bun.lock b/py-langchain/frontend/bun.lock index ac2371e..0898d8a 100644 --- a/py-langchain/frontend/bun.lock +++ b/py-langchain/frontend/bun.lock @@ -6,7 +6,7 @@ "dependencies": { "@auth0/ai": "file:auth0-ai-0.0.0.tgz", "@langchain/core": "^0.3.66", - "@langchain/langgraph-sdk": "^0.0.101", + "@langchain/langgraph-sdk": "^0.0.109", "@radix-ui/react-avatar": "^1.1.10", "@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-dialog": "^1.1.14", @@ -194,7 +194,7 @@ "@langchain/core": ["@langchain/core@0.3.66", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.46", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.25.32", "zod-to-json-schema": "^3.22.3" } }, "sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw=="], - "@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.0.101", "", { "dependencies": { "@types/json-schema": "^7.0.15", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^9.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0", "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-b7dyI+LOaJH7flwveER+0Nf0Y9gnbto+4Deet7NZoJQNE9aT+flsMogKOO0D8H5/HbEv02Tx4yY03oO/ngkOYw=="], + "@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.0.109", "", { "dependencies": { "@types/json-schema": "^7.0.15", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^9.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0", "react": "^18 || ^19", "react-dom": "^18 || ^19" }, "optionalPeers": ["@langchain/core", "react", "react-dom"] }, "sha512-UpjL0c681CJqvKxgWD8o9fwUXRZzcDfsz8EcJ2PkXFxQFKRLe4QKZMtBr4OKFTR94pJtlOuTVla4OV5I5w+mdQ=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], diff --git a/py-langchain/frontend/eslint.config.js b/py-langchain/frontend/eslint.config.js index d94e7de..14c033d 100644 --- a/py-langchain/frontend/eslint.config.js +++ b/py-langchain/frontend/eslint.config.js @@ -19,5 +19,12 @@ export default tseslint.config([ ecmaVersion: 2020, globals: globals.browser, }, + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'warn', + '@typescript-eslint/no-unused-vars': 'warn', + '@typescript-eslint/no-unused-expressions': 'warn', + 'react-refresh/only-export-components': 'warn', + }, }, ]) diff --git a/py-langchain/frontend/package-lock.json b/py-langchain/frontend/package-lock.json deleted file mode 100644 index 1bff359..0000000 --- a/py-langchain/frontend/package-lock.json +++ /dev/null @@ -1,7025 +0,0 @@ -{ - "name": "frontend", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.0.0", - "dependencies": { - "@auth0/ai": "^3.4.1", - "@langchain/core": "^0.3.66", - "@langchain/langgraph-sdk": "^0.0.101", - "@radix-ui/react-avatar": "^1.1.10", - "@radix-ui/react-checkbox": "^1.3.2", - "@radix-ui/react-dialog": "^1.1.14", - "@radix-ui/react-dropdown-menu": "^2.1.15", - "@radix-ui/react-popover": "^1.1.14", - "@radix-ui/react-slot": "^1.2.3", - "@tailwindcss/vite": "^4.1.11", - "@tanstack/react-query": "^5.83.0", - "axios": "^1.10.0", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "date-fns": "^4.1.0", - "lucide-react": "^0.525.0", - "marked": "^16.1.1", - "next-themes": "^0.4.6", - "nuqs": "^2.4.3", - "react": "^19.1.0", - "react-device-detect": "^2.2.3", - "react-dom": "^19.1.0", - "react-markdown": "^10.1.0", - "react-router": "^7.7.0", - "sonner": "^2.0.6", - "tailwind-merge": "^3.3.1", - "tailwindcss": "^4.1.11", - "tailwindcss-animate": "^1.0.7", - "use-stick-to-bottom": "^1.1.1", - "vaul": "^1.1.2" - }, - "devDependencies": { - "@eslint/js": "^9.30.1", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", - "@vitejs/plugin-react": "^4.6.0", - "eslint": "^9.30.1", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.20", - "globals": "^16.3.0", - "tw-animate-css": "^1.3.5", - "typescript": "~5.8.3", - "typescript-eslint": "^8.35.1", - "vite": "^7.0.4" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@auth0/ai": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@auth0/ai/-/ai-3.4.1.tgz", - "integrity": "sha512-CRmeD5VVvJ/wnBVdFVCOlB/UoJGJb+wbNLk6B3/DiQHm85Y4Ak20DdaM6bZIYDU5+DeBM7JpnxJIL2V3egWPyw==", - "license": "Apache-2.0", - "dependencies": { - "@openfga/sdk": "^0.8.0", - "auth0": "^4.18.0", - "jose": "^5.9.6", - "openid-client": "^6.1.7", - "stable-hash": "^0.0.5", - "tempbox": "^1.1.1", - "zod": "^3.24.2" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", - "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cfworker/json-schema": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz", - "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", - "license": "MIT" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", - "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", - "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", - "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.2", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.4.tgz", - "integrity": "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.2" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "license": "MIT" - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@langchain/core": { - "version": "0.3.66", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.66.tgz", - "integrity": "sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw==", - "license": "MIT", - "dependencies": { - "@cfworker/json-schema": "^4.0.2", - "ansi-styles": "^5.0.0", - "camelcase": "6", - "decamelize": "1.2.0", - "js-tiktoken": "^1.0.12", - "langsmith": "^0.3.46", - "mustache": "^4.2.0", - "p-queue": "^6.6.2", - "p-retry": "4", - "uuid": "^10.0.0", - "zod": "^3.25.32", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@langchain/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@langchain/core/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@langchain/langgraph-sdk": { - "version": "0.0.101", - "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.101.tgz", - "integrity": "sha512-b7dyI+LOaJH7flwveER+0Nf0Y9gnbto+4Deet7NZoJQNE9aT+flsMogKOO0D8H5/HbEv02Tx4yY03oO/ngkOYw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.15", - "p-queue": "^6.6.2", - "p-retry": "4", - "uuid": "^9.0.0" - }, - "peerDependencies": { - "@langchain/core": ">=0.2.31 <0.4.0", - "react": "^18 || ^19", - "react-dom": "^18 || ^19" - }, - "peerDependenciesMeta": { - "@langchain/core": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@openfga/sdk": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@openfga/sdk/-/sdk-0.8.1.tgz", - "integrity": "sha512-fuVYrR/+Zfl80qwWhfccvptFy+xY5JLXPaPebD3m+5zQbuX8QWsb30AR12DScF/du2Jm6MQxaW+tQWaExeBtdw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.9.0", - "axios": "^1.8.3", - "tiny-async-pool": "^2.1.0" - }, - "engines": { - "node": ">=16.15.0" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", - "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-avatar": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", - "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", - "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", - "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", - "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", - "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", - "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", - "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", - "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", - "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", - "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", - "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", - "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", - "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.5.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", - "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", - "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", - "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", - "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", - "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", - "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", - "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", - "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", - "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", - "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", - "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", - "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", - "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", - "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", - "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", - "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", - "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", - "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", - "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", - "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@tailwindcss/node": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", - "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "lightningcss": "1.30.1", - "magic-string": "^0.30.17", - "source-map-js": "^1.2.1", - "tailwindcss": "4.1.11" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", - "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.4", - "tar": "^7.4.3" - }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.11", - "@tailwindcss/oxide-darwin-arm64": "4.1.11", - "@tailwindcss/oxide-darwin-x64": "4.1.11", - "@tailwindcss/oxide-freebsd-x64": "4.1.11", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", - "@tailwindcss/oxide-linux-x64-musl": "4.1.11", - "@tailwindcss/oxide-wasm32-wasi": "4.1.11", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", - "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", - "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", - "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", - "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", - "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", - "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", - "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", - "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", - "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", - "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@emnapi/wasi-threads": "^1.0.2", - "@napi-rs/wasm-runtime": "^0.2.11", - "@tybys/wasm-util": "^0.9.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", - "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", - "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz", - "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==", - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.1.11", - "@tailwindcss/oxide": "4.1.11", - "tailwindcss": "4.1.11" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7" - } - }, - "node_modules/@tanstack/query-core": { - "version": "5.83.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.83.0.tgz", - "integrity": "sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tanstack/react-query": { - "version": "5.83.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.83.0.tgz", - "integrity": "sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==", - "license": "MIT", - "dependencies": { - "@tanstack/query-core": "5.83.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^18 || ^19" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.1.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", - "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.0.0" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", - "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/type-utils": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.38.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", - "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", - "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.38.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "license": "ISC" - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/auth0": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.27.0.tgz", - "integrity": "sha512-4FGgjzKCH/f7rQLQVR5dM30asjOObeW3PyHa8bQrS4rKkuv22JoNxox26fb1FZ3hI4zEgbVbPm9x7pHrljZzrw==", - "license": "MIT", - "dependencies": { - "jose": "^4.13.2", - "undici-types": "^6.15.0", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/auth0/node_modules/jose": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/console-table-printer": { - "version": "2.14.6", - "resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.14.6.tgz", - "integrity": "sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==", - "license": "MIT", - "dependencies": { - "simple-wcswidth": "^1.0.1" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.189", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.189.tgz", - "integrity": "sha512-y9D1ntS1ruO/pZ/V2FtLE+JXLQe28XoRpZ7QCCo0T8LdQladzdcOVQZH/IWLVJvCw12OGMb6hYOeOAjntCmJRQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", - "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.31.0", - "@eslint/plugin-kit": "^0.3.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=8.40" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", - "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/html-url-attributes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", - "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", - "license": "MIT" - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tiktoken": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.20.tgz", - "integrity": "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.5.1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/langsmith": { - "version": "0.3.48", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.48.tgz", - "integrity": "sha512-oEsj0Z8S2Chgb3vJzRX2vplLu4RWR1cpraIaVwv2PsNZ57VbHgZEdXdeh5kh16iP8PAv04JkBncP+KLRoKBFEw==", - "license": "MIT", - "dependencies": { - "@types/uuid": "^10.0.0", - "chalk": "^4.1.2", - "console-table-printer": "^2.12.1", - "p-queue": "^6.6.2", - "p-retry": "4", - "semver": "^7.6.3", - "uuid": "^10.0.0" - }, - "peerDependencies": { - "@opentelemetry/api": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/sdk-trace-base": "*", - "openai": "*" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@opentelemetry/exporter-trace-otlp-proto": { - "optional": true - }, - "@opentelemetry/sdk-trace-base": { - "optional": true - }, - "openai": { - "optional": true - } - } - }, - "node_modules/langsmith/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/langsmith/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.525.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", - "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/marked": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-16.1.1.tgz", - "integrity": "sha512-ij/2lXfCRT71L6u0M29tJPhP0bM5shLL3u5BePhFwPELj2blMJ6GDtD7PfJhRLhJ/c2UwrK17ySVcDzy2YHjHQ==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "license": "MIT" - }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "license": "MIT", - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next-themes": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nuqs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.4.3.tgz", - "integrity": "sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==", - "license": "MIT", - "dependencies": { - "mitt": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/franky47" - }, - "peerDependencies": { - "@remix-run/react": ">=2", - "next": ">=14.2.0", - "react": ">=18.2.0 || ^19.0.0-0", - "react-router": "^6 || ^7", - "react-router-dom": "^6 || ^7" - }, - "peerDependenciesMeta": { - "@remix-run/react": { - "optional": true - }, - "next": { - "optional": true - }, - "react-router": { - "optional": true - }, - "react-router-dom": { - "optional": true - } - } - }, - "node_modules/oauth4webapi": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.6.0.tgz", - "integrity": "sha512-OwXPTXjKPOldTpAa19oksrX9TYHA0rt+VcUFTkJ7QKwgmevPpNm9Cn5vFZUtIo96FiU6AfPuUUGzoXqgOzibWg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/openid-client": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.6.2.tgz", - "integrity": "sha512-Xya5TNMnnZuTM6DbHdB4q0S3ig2NTAELnii/ASie1xDEr8iiB8zZbO871OWBdrw++sd3hW6bqWjgcmSy1RTWHA==", - "license": "MIT", - "dependencies": { - "jose": "^6.0.11", - "oauth4webapi": "^3.5.4" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/openid-client/node_modules/jose": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.12.tgz", - "integrity": "sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-device-detect": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz", - "integrity": "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==", - "license": "MIT", - "dependencies": { - "ua-parser-js": "^1.0.33" - }, - "peerDependencies": { - "react": ">= 0.14.0", - "react-dom": ">= 0.14.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-markdown": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", - "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "html-url-attributes": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=18", - "react": ">=18" - } - }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-router": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.7.0.tgz", - "integrity": "sha512-3FUYSwlvB/5wRJVTL/aavqHmfUKe0+Xm9MllkYgGo9eDwNdkvwlJGjpPxono1kCycLt6AnDTgjmXvK3/B4QGuw==", - "license": "MIT", - "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", - "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-wcswidth": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz", - "integrity": "sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==", - "license": "MIT" - }, - "node_modules/sonner": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.6.tgz", - "integrity": "sha512-yHFhk8T/DK3YxjFQXIrcHT1rGEeTLliVzWbO0xN8GberVun2RiBnxAjXAYpZrqwEVHBG9asI/Li8TAAhN9m59Q==", - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "license": "MIT" - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-js": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", - "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", - "license": "MIT", - "dependencies": { - "style-to-object": "1.0.9" - } - }, - "node_modules/style-to-object": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", - "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.4" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tailwind-merge": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", - "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", - "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", - "license": "MIT" - }, - "node_modules/tailwindcss-animate": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", - "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", - "license": "MIT", - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/tempbox": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempbox/-/tempbox-1.1.1.tgz", - "integrity": "sha512-gQ4+9CSz3Rz5eQsSAfwl4kn+rgApaNaiwjELbhMzUycgXl+AXGn8lpq45DTaipADu1eJk5N90w0+OYWlCHQD5A==", - "license": "MIT", - "dependencies": { - "tinyqueue": "^3.0.0" - } - }, - "node_modules/tiny-async-pool": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-2.1.0.tgz", - "integrity": "sha512-ltAHPh/9k0STRQqaoUX52NH4ZQYAJz24ZAEwf1Zm+HYg3l9OXTWeqWKyYsHu40wF/F0rxd2N2bk5sLvX2qlSvg==", - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinyqueue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", - "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", - "license": "ISC" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tw-animate-css": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.5.tgz", - "integrity": "sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Wombosvideo" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", - "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.38.0", - "@typescript-eslint/parser": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.40", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", - "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-stick-to-bottom": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-stick-to-bottom/-/use-stick-to-bottom-1.1.1.tgz", - "integrity": "sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vaul": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", - "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-dialog": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.6", - "picomatch": "^4.0.2", - "postcss": "^8.5.6", - "rollup": "^4.40.0", - "tinyglobby": "^0.2.14" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/py-langchain/frontend/package.json b/py-langchain/frontend/package.json index 6c56c04..77de06c 100644 --- a/py-langchain/frontend/package.json +++ b/py-langchain/frontend/package.json @@ -12,7 +12,7 @@ "dependencies": { "@auth0/ai": "file:auth0-ai-0.0.0.tgz", "@langchain/core": "^0.3.66", - "@langchain/langgraph-sdk": "^0.0.101", + "@langchain/langgraph-sdk": "^0.0.109", "@radix-ui/react-avatar": "^1.1.10", "@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-dialog": "^1.1.14", diff --git a/py-langchain/frontend/src/components/chat-message-bubble.tsx b/py-langchain/frontend/src/components/chat-message-bubble.tsx index 59f40bb..51b44e4 100644 --- a/py-langchain/frontend/src/components/chat-message-bubble.tsx +++ b/py-langchain/frontend/src/components/chat-message-bubble.tsx @@ -1,34 +1,148 @@ -import { type Message } from "@langchain/langgraph-sdk"; +import { type Message, type AIMessage } from '@langchain/langgraph-sdk'; +import { Loader2, CheckCircle } from 'lucide-react'; -import { cn } from "@/lib/utils"; -import { MemoizedMarkdown } from "./memoize-markdown"; +import { cn } from '@/lib/utils'; +import { MemoizedMarkdown } from './memoize-markdown'; -export function ChatMessageBubble(props: { - message: Message; - aiEmoji?: string; +function ToolCallDisplay({ + toolCall, + isRunning, + messageContent +}: { + toolCall: NonNullable[0]; + isRunning: boolean; + messageContent?: string; }) { - return ["human", "ai"].includes(props.message.type) && - props.message.content.length > 0 ? ( + return ( +
+
+ {isRunning ? ( + + ) : ( + + )} + + {isRunning ? `Calling ${toolCall.name}...` : `Called ${toolCall.name}`} + +
+ + {/* Show tool arguments/input */} + {toolCall.args && Object.keys(toolCall.args).length > 0 && ( +
+
Input:
+
+ {JSON.stringify(toolCall.args, null, 2)} +
+
+ )} + + {/* Show tool result/output */} + {messageContent && !isRunning && ( +
+
Output:
+
+ + {messageContent} + +
+
+ )} +
+ ); +} + +export function ChatMessageBubble(props: { message: Message; aiEmoji?: string; allMessages?: Message[] }) { + const toolCalls = props.message.type === 'ai' ? props.message.tool_calls || [] : []; + + // Get message content as string + const getMessageContent = (message: Message): string => { + if (typeof message.content === 'string') { + return message.content; + } + if (Array.isArray(message.content)) { + return message.content + .map(part => { + if (typeof part === 'string') return part; + if (typeof part === 'object' && 'text' in part) return part.text; + return ''; + }) + .join(''); + } + return ''; + }; + + const content = getMessageContent(props.message); + const hasContent = content.length > 0; + const hasToolCalls = toolCalls.length > 0; + + // Check if tool calls have corresponding tool result messages + const hasToolResults = hasToolCalls && props.allMessages && toolCalls.some(toolCall => + props.allMessages!.some(msg => + msg.type === 'tool' && + 'tool_call_id' in msg && + msg.tool_call_id === toolCall.id + ) + ); + + // Simple logic: Running = tool calls exist but no tool result messages yet + const isRunning = hasToolCalls && !hasToolResults; + + // Get tool result content for display + const getToolResultContent = () => { + if (!hasToolCalls || !props.allMessages) return ''; + + for (const toolCall of toolCalls) { + const toolResult = props.allMessages.find(msg => + msg.type === 'tool' && + 'tool_call_id' in msg && + msg.tool_call_id === toolCall.id + ); + if (toolResult) { + return getMessageContent(toolResult); + } + } + return ''; + }; + + const toolResultContent = getToolResultContent(); + + // Show tool calls if we have any + const shouldShowToolCalls = hasToolCalls; + + if (!(['human', 'ai'].includes(props.message.type) && (hasContent || shouldShowToolCalls))) { + return null; + } + + return (
- {props.message.type === "ai" && ( + {props.message.type === 'ai' && (
{props.aiEmoji}
)}
- + {shouldShowToolCalls && ( +
+ {toolCalls.map((toolCall) => ( + + ))} +
+ )} + {hasContent && ( + + )}
- ) : null; -} + ); +} \ No newline at end of file diff --git a/py-langchain/frontend/src/components/chat-window.tsx b/py-langchain/frontend/src/components/chat-window.tsx index 183fd0a..a3dc59f 100644 --- a/py-langchain/frontend/src/components/chat-window.tsx +++ b/py-langchain/frontend/src/components/chat-window.tsx @@ -23,7 +23,7 @@ function ChatMessages(props: {
{props.messages.map((m, i) => { return ( - + ); })}
diff --git a/ts-langchain/.env.example b/ts-langchain/.env.example index 11679b4..10fcfbb 100644 --- a/ts-langchain/.env.example +++ b/ts-langchain/.env.example @@ -10,6 +10,11 @@ AUTH0_SECRET="use [openssl rand -hex 32] to generate a 32 bytes value" AUTH0_DOMAIN="https://{yourDomain}" AUTH0_CLIENT_ID="{yourClientId}" AUTH0_CLIENT_SECRET="{yourClientSecret}" +# Use your SHOP_API_AUDIENCE or a separate LangGraph API audience +AUTH0_AUDIENCE="https://your.domain.us.langgraph.app" +AUTH0_SCOPE="openid profile email" +AUTH0_CUSTOM_API_CLIENT_ID="{yourCustomApiClientId}" +AUTH0_CUSTOM_API_CLIENT_SECRET="{yourCustomApiClientSecret}" # Database configuration DATABASE_URL="postgresql://postgres:postgres@localhost:5432/ai_documents_db" diff --git a/ts-langchain/.eslintrc.json b/ts-langchain/.eslintrc.json index bffb357..39089da 100644 --- a/ts-langchain/.eslintrc.json +++ b/ts-langchain/.eslintrc.json @@ -1,3 +1,33 @@ { - "extends": "next/core-web-vitals" -} + "root": true, + "extends": [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint", + "import" + ], + "rules": { + "@typescript-eslint/no-var-requires": "off", + "import/no-commonjs": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-non-null-asserted-optional-chain": "off", + "@typescript-eslint/no-require-imports": "off", + "@typescript-eslint/no-unused-vars": "warn" + }, + "overrides": [ + { + "files": ["*.config.{js,cjs,mjs}", "scripts/**", "next.config.*", "postcss.config.js", "tailwind.config.*"], + "rules": { + "@typescript-eslint/no-var-requires": "off", + "import/no-commonjs": "off" + } + }, + { + "files": ["**/__tests__/**", "**/*.test.{ts,tsx}"], + "env": { "jest": true } + } + ] +} \ No newline at end of file diff --git a/ts-langchain/auth0-ai-0.0.0.tgz b/ts-langchain/auth0-ai-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7198fb3c1d1cfb5a22975325dab1195044533225 GIT binary patch literal 69902 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 literal 0 HcmV?d00001 diff --git a/ts-langchain/auth0-ai-langchain-0.0.0.tgz b/ts-langchain/auth0-ai-langchain-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..051693995b600474d36c6160fc59f83e053e1d11 GIT binary patch literal 31197 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 MrW;K_yud;J7YZ$*7ytkO literal 0 HcmV?d00001 diff --git a/ts-langchain/bun.lock b/ts-langchain/bun.lock index 826e7f9..55c95c2 100644 --- a/ts-langchain/bun.lock +++ b/ts-langchain/bun.lock @@ -4,12 +4,15 @@ "": { "name": "auth0-assistant0", "dependencies": { - "@auth0/ai-langchain": "3.2.0", + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", + "@auth0/ai-langchain": "file:auth0-ai-langchain-0.0.0.tgz", "@auth0/nextjs-auth0": "4.8.0", - "@langchain/community": "0.3.49", - "@langchain/core": "0.3.63", - "@langchain/langgraph": "0.3.8", + "@langchain/community": "^0.3.53", + "@langchain/core": "^0.3.72", + "@langchain/langgraph": "^0.4.6", + "@langchain/langgraph-sdk": "^0.0.109", "@langchain/openai": "0.6.1", + "@openfga/sdk": "^0.8.0", "@radix-ui/react-avatar": "^1.1.7", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dialog": "^1.1.11", @@ -24,8 +27,9 @@ "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", "googleapis": "^148.0.0", + "jose": "^6.1.0", "langchain": "0.3.30", - "langgraph-nextjs-api-passthrough": "0.1.3", + "langgraph-nextjs-api-passthrough": "^0.1.4", "lucide-react": "^0.475.0", "marked": "^15.0.7", "nanoid": "^5.1.5", @@ -67,14 +71,17 @@ }, }, }, + "overrides": { + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", + }, "packages": { "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.27.3", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" } }, "sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw=="], - "@auth0/ai": ["@auth0/ai@3.4.1", "", { "dependencies": { "@openfga/sdk": "^0.8.0", "auth0": "^4.18.0", "jose": "^5.9.6", "openid-client": "^6.1.7", "stable-hash": "^0.0.5", "tempbox": "^1.1.1", "zod": "^3.24.2" } }, "sha512-CRmeD5VVvJ/wnBVdFVCOlB/UoJGJb+wbNLk6B3/DiQHm85Y4Ak20DdaM6bZIYDU5+DeBM7JpnxJIL2V3egWPyw=="], + "@auth0/ai": ["@auth0/ai@auth0-ai-0.0.0.tgz", { "dependencies": { "@openfga/sdk": "^0.8.0", "auth0": "^4.30.0", "jose": "^5.9.6", "openid-client": "^6.1.7", "stable-hash": "^0.0.5", "tempbox": "^1.1.1", "zod": "^3.25.76" } }], - "@auth0/ai-langchain": ["@auth0/ai-langchain@3.2.0", "", { "dependencies": { "@auth0/ai": "*", "langchain": "^0.3.11" }, "peerDependencies": { "@langchain/core": "^0.3.19", "@langchain/langgraph": "^0.2.55", "@langchain/langgraph-sdk": "^0.0.57", "@openfga/sdk": "0.8.0", "zod": "^3.24.2" } }, "sha512-lJvORb9WGa9PXrjE+fJAbNSQPecMg4eLBj7iJa4CDNzDLfOA3sZBuVfzeqQ8S3O1LJ64bEjNLGlXl8juqbkdaw=="], + "@auth0/ai-langchain": ["@auth0/ai-langchain@auth0-ai-langchain-0.0.0.tgz", { "dependencies": { "@auth0/ai": "*", "langchain": "^0.3.11" }, "peerDependencies": { "@langchain/core": "^0.3.72", "@langchain/langgraph": "^0.4.4", "@langchain/langgraph-sdk": "^0.0.107", "@openfga/sdk": "0.8.0", "zod": "^3.25.76" } }], "@auth0/nextjs-auth0": ["@auth0/nextjs-auth0@4.8.0", "", { "dependencies": { "@edge-runtime/cookies": "^5.0.1", "@panva/hkdf": "^1.2.1", "jose": "^5.9.6", "oauth4webapi": "^3.1.2", "swr": "^2.2.5" }, "peerDependencies": { "next": "^14.2.25 || ^15.2.3", "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" } }, "sha512-tgo4f6u1Ac4MqjwiYtllr9DzcNK+ThDoU4VYj6uTTqebwGGSdhXZWAkHFwWgabgWdeYHXpKYZ0xS9dQZv/PNAQ=="], @@ -90,109 +97,109 @@ "@edge-runtime/cookies": ["@edge-runtime/cookies@5.0.2", "", {}, "sha512-Sd8LcWpZk/SWEeKGE8LT6gMm5MGfX/wm+GPnh1eBEtCpya3vYqn37wYknwAHw92ONoyyREl1hJwxV/Qx2DWNOg=="], - "@emnapi/core": ["@emnapi/core@1.4.4", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.3", "tslib": "^2.4.0" } }, "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g=="], + "@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], - "@emnapi/runtime": ["@emnapi/runtime@1.4.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.6", "", { "os": "aix", "cpu": "ppc64" }, "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.10", "", { "os": "aix", "cpu": "ppc64" }, "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.6", "", { "os": "android", "cpu": "arm" }, "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.10", "", { "os": "android", "cpu": "arm" }, "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.6", "", { "os": "android", "cpu": "arm64" }, "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.10", "", { "os": "android", "cpu": "arm64" }, "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.6", "", { "os": "android", "cpu": "x64" }, "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.10", "", { "os": "android", "cpu": "x64" }, "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.6", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.10", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.6", "", { "os": "linux", "cpu": "arm" }, "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.10", "", { "os": "linux", "cpu": "arm" }, "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.6", "", { "os": "linux", "cpu": "ia32" }, "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.10", "", { "os": "linux", "cpu": "ia32" }, "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.6", "", { "os": "linux", "cpu": "none" }, "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.6", "", { "os": "linux", "cpu": "none" }, "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.6", "", { "os": "linux", "cpu": "ppc64" }, "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.10", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.6", "", { "os": "linux", "cpu": "none" }, "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.6", "", { "os": "linux", "cpu": "s390x" }, "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.10", "", { "os": "linux", "cpu": "s390x" }, "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.6", "", { "os": "linux", "cpu": "x64" }, "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.10", "", { "os": "linux", "cpu": "x64" }, "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.6", "", { "os": "none", "cpu": "arm64" }, "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.6", "", { "os": "none", "cpu": "x64" }, "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.10", "", { "os": "none", "cpu": "x64" }, "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.6", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.10", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.6", "", { "os": "openbsd", "cpu": "x64" }, "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.10", "", { "os": "openbsd", "cpu": "x64" }, "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.6", "", { "os": "none", "cpu": "arm64" }, "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.6", "", { "os": "sunos", "cpu": "x64" }, "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.10", "", { "os": "sunos", "cpu": "x64" }, "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.6", "", { "os": "win32", "cpu": "x64" }, "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.10", "", { "os": "win32", "cpu": "x64" }, "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g=="], "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], "@eslint/config-array": ["@eslint/config-array@0.21.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ=="], - "@eslint/config-helpers": ["@eslint/config-helpers@0.3.0", "", {}, "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw=="], + "@eslint/config-helpers": ["@eslint/config-helpers@0.3.1", "", {}, "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA=="], - "@eslint/core": ["@eslint/core@0.15.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA=="], + "@eslint/core": ["@eslint/core@0.15.2", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg=="], "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], - "@eslint/js": ["@eslint/js@9.31.0", "", {}, "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw=="], + "@eslint/js": ["@eslint/js@9.36.0", "", {}, "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw=="], "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.3", "", { "dependencies": { "@eslint/core": "^0.15.1", "levn": "^0.4.1" } }, "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag=="], + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.5", "", { "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" } }, "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w=="], - "@floating-ui/core": ["@floating-ui/core@1.7.2", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw=="], + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], - "@floating-ui/dom": ["@floating-ui/dom@1.7.2", "", { "dependencies": { "@floating-ui/core": "^1.7.2", "@floating-ui/utils": "^0.2.10" } }, "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], - "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.4", "", { "dependencies": { "@floating-ui/dom": "^1.7.2" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw=="], + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], "@graphql-typed-document-node/core": ["@graphql-typed-document-node/core@3.2.0", "", { "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ=="], - "@grpc/grpc-js": ["@grpc/grpc-js@1.13.4", "", { "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg=="], + "@grpc/grpc-js": ["@grpc/grpc-js@1.14.0", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg=="], - "@grpc/proto-loader": ["@grpc/proto-loader@0.7.15", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ=="], + "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], - "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], + "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@ibm-cloud/watsonx-ai": ["@ibm-cloud/watsonx-ai@1.6.8", "", { "dependencies": { "@types/node": "^18.0.0", "extend": "3.0.2", "ibm-cloud-sdk-core": "^5.3.2" } }, "sha512-Ip5bLDM40rQRYauRmmIIpxLO57wI3+F59Njmp0hexnVr+uKroV+O9+eAGQkdE2c9d17R16Q77ueAGheZrzqgWA=="], + "@ibm-cloud/watsonx-ai": ["@ibm-cloud/watsonx-ai@1.6.13", "", { "dependencies": { "@types/node": "^18.0.0", "extend": "3.0.2", "form-data": "^4.0.4", "ibm-cloud-sdk-core": "^5.4.3" } }, "sha512-INaaD7EKpycwQg/tsLm3QM5uvDF5mWLPQCj6GTk44gEZhgx1depvVG5bxwjfqkx1tbJMFuozz2p6VHOE21S+8g=="], "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], @@ -234,39 +241,39 @@ "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.12", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.4", "", {}, "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], - "@langchain/community": ["@langchain/community@0.3.49", "", { "dependencies": { "@langchain/openai": ">=0.2.0 <0.7.0", "@langchain/weaviate": "^0.2.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", "langsmith": "^0.3.33", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", "@aws-sdk/client-bedrock-runtime": "^3.749.0", "@aws-sdk/client-dynamodb": "^3.749.0", "@aws-sdk/client-kendra": "^3.749.0", "@aws-sdk/client-lambda": "^3.749.0", "@aws-sdk/client-s3": "^3.749.0", "@aws-sdk/client-sagemaker-runtime": "^3.749.0", "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", "@huggingface/inference": "^4.0.5", "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.12.0", "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", "@mlc-ai/web-llm": "*", "@mozilla/readability": "*", "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", "@qdrant/js-client-rest": "^1.8.2", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", "@smithy/protocol-http": "^3.0.6", "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", "@upstash/vector": "^1.1.1", "@vercel/kv": "*", "@vercel/postgres": "*", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.28.0", "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", "cheerio": "^1.0.0-rc.12", "chromadb": "*", "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", "dria": "^0.0.3", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", "fast-xml-parser": "*", "firebase-admin": "^11.9.0 || ^12.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", "html-to-text": "^9.0.5", "ibm-cloud-sdk-core": "*", "ignore": "^5.2.0", "interface-datastore": "^8.2.11", "ioredis": "^5.3.2", "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", "pdf-parse": "1.1.1", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", "pickleparser": "^0.2.1", "playwright": "^1.32.1", "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", "redis": "*", "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", "weaviate-client": "^3.5.2", "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", "youtubei.js": "*" }, "optionalPeers": ["@arcjet/redact", "@aws-crypto/sha256-js", "@aws-sdk/client-bedrock-agent-runtime", "@aws-sdk/client-bedrock-runtime", "@aws-sdk/client-dynamodb", "@aws-sdk/client-kendra", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sagemaker-runtime", "@aws-sdk/client-sfn", "@aws-sdk/credential-provider-node", "@azure/search-documents", "@azure/storage-blob", "@browserbasehq/sdk", "@clickhouse/client", "@cloudflare/ai", "@datastax/astra-db-ts", "@elastic/elasticsearch", "@getmetal/metal-sdk", "@getzep/zep-cloud", "@getzep/zep-js", "@gomomento/sdk", "@gomomento/sdk-core", "@google-ai/generativelanguage", "@google-cloud/storage", "@gradientai/nodejs-sdk", "@huggingface/inference", "@huggingface/transformers", "@lancedb/lancedb", "@layerup/layerup-security", "@libsql/client", "@mendable/firecrawl-js", "@mlc-ai/web-llm", "@mozilla/readability", "@neondatabase/serverless", "@notionhq/client", "@opensearch-project/opensearch", "@pinecone-database/pinecone", "@planetscale/database", "@premai/prem-sdk", "@qdrant/js-client-rest", "@raycast/api", "@rockset/client", "@smithy/eventstream-codec", "@smithy/protocol-http", "@smithy/signature-v4", "@smithy/util-utf8", "@spider-cloud/spider-client", "@supabase/supabase-js", "@tensorflow-models/universal-sentence-encoder", "@tensorflow/tfjs-converter", "@tensorflow/tfjs-core", "@upstash/ratelimit", "@upstash/redis", "@upstash/vector", "@vercel/kv", "@vercel/postgres", "@writerai/writer-sdk", "@xata.io/client", "@zilliz/milvus2-sdk-node", "apify-client", "assemblyai", "azion", "better-sqlite3", "cassandra-driver", "cborg", "cheerio", "chromadb", "closevector-common", "closevector-node", "closevector-web", "cohere-ai", "convex", "crypto-js", "d3-dsv", "discord.js", "dria", "duck-duck-scrape", "epub2", "fast-xml-parser", "firebase-admin", "google-auth-library", "googleapis", "hnswlib-node", "html-to-text", "ignore", "interface-datastore", "ioredis", "it-all", "jsdom", "jsonwebtoken", "llmonitor", "lodash", "lunary", "mammoth", "mariadb", "mem0ai", "mongodb", "mysql2", "neo4j-driver", "notion-to-md", "officeparser", "pdf-parse", "pg", "pg-copy-streams", "pickleparser", "playwright", "portkey-ai", "puppeteer", "pyodide", "redis", "replicate", "sonix-speech-recognition", "srt-parser-2", "typeorm", "typesense", "usearch", "voy-search", "weaviate-client", "web-auth-library", "word-extractor", "ws", "youtubei.js"] }, "sha512-1AAo9mvr1FmqYHUpXhYI8P4NBPC4t9TfUAuvefEImrtb3gZ60fPelVu17ljWlKJcHC1hPSHYpPJWm0Yx7yRvrw=="], + "@langchain/community": ["@langchain/community@0.3.57", "", { "dependencies": { "@langchain/openai": ">=0.2.0 <0.7.0", "@langchain/weaviate": "^0.2.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", "langsmith": "^0.3.67", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", "@aws-sdk/client-bedrock-runtime": "^3.749.0", "@aws-sdk/client-dynamodb": "^3.749.0", "@aws-sdk/client-kendra": "^3.749.0", "@aws-sdk/client-lambda": "^3.749.0", "@aws-sdk/client-s3": "^3.749.0", "@aws-sdk/client-sagemaker-runtime": "^3.749.0", "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", "@huggingface/inference": "^4.0.5", "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.19.1", "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", "@mlc-ai/web-llm": "*", "@mozilla/readability": "*", "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", "@qdrant/js-client-rest": "^1.15.0", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", "@smithy/protocol-http": "^3.0.6", "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", "@upstash/vector": "^1.1.1", "@vercel/kv": "*", "@vercel/postgres": "*", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.28.0", "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", "cheerio": "^1.0.0-rc.12", "chromadb": "*", "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", "fast-xml-parser": "*", "firebase-admin": "^11.9.0 || ^12.0.0 || ^13.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", "html-to-text": "^9.0.5", "ibm-cloud-sdk-core": "*", "ignore": "^5.2.0", "interface-datastore": "^8.2.11", "ioredis": "^5.3.2", "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", "pdf-parse": "1.1.1", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", "pickleparser": "^0.2.1", "playwright": "^1.32.1", "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", "redis": "*", "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", "weaviate-client": "^3.5.2", "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", "youtubei.js": "*" }, "optionalPeers": ["@arcjet/redact", "@aws-crypto/sha256-js", "@aws-sdk/client-bedrock-agent-runtime", "@aws-sdk/client-bedrock-runtime", "@aws-sdk/client-dynamodb", "@aws-sdk/client-kendra", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sagemaker-runtime", "@aws-sdk/client-sfn", "@aws-sdk/credential-provider-node", "@azure/search-documents", "@azure/storage-blob", "@browserbasehq/sdk", "@clickhouse/client", "@cloudflare/ai", "@datastax/astra-db-ts", "@elastic/elasticsearch", "@getmetal/metal-sdk", "@getzep/zep-cloud", "@getzep/zep-js", "@gomomento/sdk", "@gomomento/sdk-core", "@google-ai/generativelanguage", "@google-cloud/storage", "@gradientai/nodejs-sdk", "@huggingface/inference", "@huggingface/transformers", "@lancedb/lancedb", "@layerup/layerup-security", "@libsql/client", "@mendable/firecrawl-js", "@mlc-ai/web-llm", "@mozilla/readability", "@neondatabase/serverless", "@notionhq/client", "@opensearch-project/opensearch", "@pinecone-database/pinecone", "@planetscale/database", "@premai/prem-sdk", "@qdrant/js-client-rest", "@raycast/api", "@rockset/client", "@smithy/eventstream-codec", "@smithy/protocol-http", "@smithy/signature-v4", "@smithy/util-utf8", "@spider-cloud/spider-client", "@supabase/supabase-js", "@tensorflow-models/universal-sentence-encoder", "@tensorflow/tfjs-converter", "@tensorflow/tfjs-core", "@upstash/ratelimit", "@upstash/redis", "@upstash/vector", "@vercel/kv", "@vercel/postgres", "@writerai/writer-sdk", "@xata.io/client", "@zilliz/milvus2-sdk-node", "apify-client", "assemblyai", "azion", "better-sqlite3", "cassandra-driver", "cborg", "cheerio", "chromadb", "closevector-common", "closevector-node", "closevector-web", "cohere-ai", "convex", "crypto-js", "d3-dsv", "discord.js", "duck-duck-scrape", "epub2", "fast-xml-parser", "firebase-admin", "google-auth-library", "googleapis", "hnswlib-node", "html-to-text", "ignore", "interface-datastore", "ioredis", "it-all", "jsdom", "jsonwebtoken", "llmonitor", "lodash", "lunary", "mammoth", "mariadb", "mem0ai", "mongodb", "mysql2", "neo4j-driver", "notion-to-md", "officeparser", "pdf-parse", "pg", "pg-copy-streams", "pickleparser", "playwright", "portkey-ai", "puppeteer", "pyodide", "redis", "replicate", "sonix-speech-recognition", "srt-parser-2", "typeorm", "typesense", "usearch", "voy-search", "weaviate-client", "web-auth-library", "word-extractor", "ws", "youtubei.js"] }, "sha512-xUe5UIlh1yZjt/cMtdSVlCoC5xm/RMN/rp+KZGLbquvjQeONmQ2rvpCqWjAOgQ6SPLqKiXvoXaKSm20r+LHISw=="], - "@langchain/core": ["@langchain/core@0.3.63", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.33", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.25.32", "zod-to-json-schema": "^3.22.3" } }, "sha512-CQfyu4WgwizUhSc1YsDDzzHga6WVhLqeuAyCD4VpGAPa3k3QI+H0b3ECFr/WjJMw0amMtHtfgPWMa1tS7P7qVg=="], + "@langchain/core": ["@langchain/core@0.3.78", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.67", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.25.32", "zod-to-json-schema": "^3.22.3" } }, "sha512-Nn0x9erQlK3zgtRU1Z8NUjLuyW0gzdclMsvLQ6wwLeDqV91pE+YKl6uQb+L2NUDs4F0N7c2Zncgz46HxrvPzuA=="], - "@langchain/langgraph": ["@langchain/langgraph@0.3.8", "", { "dependencies": { "@langchain/langgraph-checkpoint": "~0.0.18", "@langchain/langgraph-sdk": "~0.0.92", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@langchain/core": ">=0.3.58 < 0.4.0", "zod-to-json-schema": "^3.x" }, "optionalPeers": ["zod-to-json-schema"] }, "sha512-JOtYNMa7BixzXrAtV76x1lS2+Blt4WLcbFUWwtiEqTMzwNg00fSvUQ6FaPeootL66iYamg67AVq12PerqMrelw=="], + "@langchain/langgraph": ["@langchain/langgraph@0.4.9", "", { "dependencies": { "@langchain/langgraph-checkpoint": "^0.1.1", "@langchain/langgraph-sdk": "~0.1.0", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@langchain/core": ">=0.3.58 < 0.4.0", "zod-to-json-schema": "^3.x" }, "optionalPeers": ["zod-to-json-schema"] }, "sha512-+rcdTGi4Ium4X/VtIX3Zw4RhxEkYWpwUyz806V6rffjHOAMamg6/WZDxpJbrP33RV/wJG1GH12Z29oX3Pqq3Aw=="], - "@langchain/langgraph-checkpoint": ["@langchain/langgraph-checkpoint@0.0.18", "", { "dependencies": { "uuid": "^10.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0" } }, "sha512-IS7zJj36VgY+4pf8ZjsVuUWef7oTwt1y9ylvwu0aLuOn1d0fg05Om9DLm3v2GZ2Df6bhLV1kfWAM0IAl9O5rQQ=="], + "@langchain/langgraph-checkpoint": ["@langchain/langgraph-checkpoint@0.1.1", "", { "dependencies": { "uuid": "^10.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0 || ^1.0.0-alpha" } }, "sha512-h2bP0RUikQZu0Um1ZUPErQLXyhzroJqKRbRcxYRTAh49oNlsfeq4A3K4YEDRbGGuyPZI/Jiqwhks1wZwY73AZw=="], - "@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.0.95", "", { "dependencies": { "@types/json-schema": "^7.0.15", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^9.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0", "react": "^18 || ^19", "react-dom": "^18 || ^19" }, "optionalPeers": ["@langchain/core", "react", "react-dom"] }, "sha512-nfchDZUTJMTS4AtH5NyEhoGLUyhVQqBSm8liK0ApHc/PQhSlW7qumfsF85E+utnqWKWgdc9osSKl5jDff4j/HA=="], + "@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.0.109", "", { "dependencies": { "@types/json-schema": "^7.0.15", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^9.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0", "react": "^18 || ^19", "react-dom": "^18 || ^19" }, "optionalPeers": ["@langchain/core", "react", "react-dom"] }, "sha512-UpjL0c681CJqvKxgWD8o9fwUXRZzcDfsz8EcJ2PkXFxQFKRLe4QKZMtBr4OKFTR94pJtlOuTVla4OV5I5w+mdQ=="], "@langchain/openai": ["@langchain/openai@0.6.1", "", { "dependencies": { "js-tiktoken": "^1.0.12", "openai": "^5.3.0", "zod": "^3.25.32" }, "peerDependencies": { "@langchain/core": ">=0.3.58 <0.4.0" } }, "sha512-jm8MzMEjAKPReYma4Lewb9vGnocKbhoClqPuRTxtKPDgqQ5yJWSisNy4iZO/a1d6ag/7MnxwKMjVsJdy1cBsxw=="], "@langchain/textsplitters": ["@langchain/textsplitters@0.1.0", "", { "dependencies": { "js-tiktoken": "^1.0.12" }, "peerDependencies": { "@langchain/core": ">=0.2.21 <0.4.0" } }, "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw=="], - "@langchain/weaviate": ["@langchain/weaviate@0.2.1", "", { "dependencies": { "uuid": "^10.0.0", "weaviate-client": "^3.5.2" }, "peerDependencies": { "@langchain/core": ">=0.2.21 <0.4.0" } }, "sha512-rlfAKF+GB0A5MUrol34oDrBkl4q6AefARk9KDW+LfzhV/74pZZLZyIPYPxvE4XwI3gvpwp024DNsDxK/4UW0/g=="], + "@langchain/weaviate": ["@langchain/weaviate@0.2.3", "", { "dependencies": { "uuid": "^10.0.0", "weaviate-client": "^3.5.2" }, "peerDependencies": { "@langchain/core": ">=0.2.21 <0.4.0" } }, "sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w=="], "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], - "@next/bundle-analyzer": ["@next/bundle-analyzer@15.4.1", "", { "dependencies": { "webpack-bundle-analyzer": "4.10.1" } }, "sha512-O5R3iPLR3/oQWFIXl+Mnd02IyhvWBterTlXcceIGw29QHWL/gjvyO0eIVEvrJPS7zzE6/NSu1TiSVgi8mxotlw=="], + "@next/bundle-analyzer": ["@next/bundle-analyzer@15.5.4", "", { "dependencies": { "webpack-bundle-analyzer": "4.10.1" } }, "sha512-wMtpIjEHi+B/wC34ZbEcacGIPgQTwTFjjp0+F742s9TxC6QwT0MwB/O0QEgalMe8s3SH/K09DO0gmTvUSJrLRA=="], "@next/env": ["@next/env@15.2.4", "", {}, "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g=="], - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.4.1", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-lQnHUxN7mMksK7IxgKDIXNMWFOBmksVrjamMEURXiYfo7zgsc30lnU8u4y/MJktSh+nB80ktTQeQbWdQO6c8Ow=="], + "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.5.4", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw=="], "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw=="], @@ -300,7 +307,7 @@ "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - "@playwright/test": ["@playwright/test@1.54.1", "", { "dependencies": { "playwright": "1.54.1" }, "bin": { "playwright": "cli.js" } }, "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw=="], + "@playwright/test": ["@playwright/test@1.55.1", "", { "dependencies": { "playwright": "1.55.1" }, "bin": { "playwright": "cli.js" } }, "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig=="], "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], @@ -324,13 +331,13 @@ "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.2", "", {}, "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], "@radix-ui/react-avatar": ["@radix-ui/react-avatar@1.1.10", "", { "dependencies": { "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog=="], - "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.2", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.4", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA=="], + "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw=="], "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], @@ -338,33 +345,33 @@ "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], - "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.10", "@radix-ui/react-focus-guards": "1.1.2", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.4", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], - "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], - "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ=="], + "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], - "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], - "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.10", "@radix-ui/react-focus-guards": "1.1.2", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.7", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.4", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.10", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew=="], + "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], - "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.10", "@radix-ui/react-focus-guards": "1.1.2", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.7", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.4", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw=="], + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], - "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.7", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ=="], + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], - "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], @@ -392,13 +399,15 @@ "@rushstack/eslint-patch": ["@rushstack/eslint-patch@1.12.0", "", {}, "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw=="], + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], @@ -416,13 +425,13 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@22.16.4", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-PYRhNtZdm2wH/NT2k/oAJ6/f2VD2N2Dag0lGlx2vWgMSJXGNmlce5MiTQzoWAiIJtso30mjnfQCOKVH+kAQC/g=="], + "@types/node": ["@types/node@22.18.8", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw=="], - "@types/node-fetch": ["@types/node-fetch@2.6.12", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA=="], + "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], "@types/pdf-parse": ["@types/pdf-parse@1.1.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-kBfrSXsloMnUJOKi25s3+hRmkycHfLK6A09eRGqF/N8BkQoPUmaCr+q8Cli5FnfohEz/rsv82zAiPz/LXtOGhA=="], - "@types/pg": ["@types/pg@8.15.4", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg=="], + "@types/pg": ["@types/pg@8.15.5", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ=="], "@types/react": ["@types/react@19.0.9", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-FedNTYgmMwSZmD1Sru/W1gJKuiYCN/3SuBkmZkcxX+FpO5zL76B22A9YNfAKg4HQO3Neh/30AiynP6BELdU0qQ=="], @@ -436,25 +445,25 @@ "@types/uuid": ["@types/uuid@10.0.0", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.37.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/type-utils": "8.37.0", "@typescript-eslint/utils": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.37.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.45.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/type-utils": "8.45.0", "@typescript-eslint/utils": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.45.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.37.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/types": "8.37.0", "@typescript-eslint/typescript-estree": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.45.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.37.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.37.0", "@typescript-eslint/types": "^8.37.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.45.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.45.0", "@typescript-eslint/types": "^8.45.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.37.0", "", { "dependencies": { "@typescript-eslint/types": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0" } }, "sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.45.0", "", { "dependencies": { "@typescript-eslint/types": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0" } }, "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.37.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.45.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.37.0", "", { "dependencies": { "@typescript-eslint/types": "8.37.0", "@typescript-eslint/typescript-estree": "8.37.0", "@typescript-eslint/utils": "8.37.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.45.0", "", { "dependencies": { "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/utils": "8.45.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.37.0", "", {}, "sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.45.0", "", {}, "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.37.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.37.0", "@typescript-eslint/tsconfig-utils": "8.37.0", "@typescript-eslint/types": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.45.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.45.0", "@typescript-eslint/tsconfig-utils": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.37.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/types": "8.37.0", "@typescript-eslint/typescript-estree": "8.37.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A=="], + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.45.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.37.0", "", { "dependencies": { "@typescript-eslint/types": "8.37.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.45.0", "", { "dependencies": { "@typescript-eslint/types": "8.45.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], @@ -512,7 +521,7 @@ "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], @@ -550,7 +559,7 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "auth0": ["auth0@4.27.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-4FGgjzKCH/f7rQLQVR5dM30asjOObeW3PyHa8bQrS4rKkuv22JoNxox26fb1FZ3hI4zEgbVbPm9x7pHrljZzrw=="], + "auth0": ["auth0@4.31.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-DO9ET/o4OILQHOfNPBnF+wP3zC9IGVeCTH3pCbTlmE7+3v8RfipxkkKJ/gW3tFPb3w8qkkZHTe/SzmDjjY/CEQ=="], "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], @@ -558,7 +567,7 @@ "axe-core": ["axe-core@4.10.3", "", {}, "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg=="], - "axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], + "axios": ["axios@1.12.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw=="], "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], @@ -568,6 +577,8 @@ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.11", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-i+sRXGhz4+QW8aACZ3+r1GAKMt0wlFpeA8M5rOQd0HEYw9zhDrlx9Wc8uQ0IdXakjJRthzglEwfB/yqIjO6iDg=="], + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], @@ -576,7 +587,7 @@ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "browserslist": ["browserslist@4.25.1", "", { "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw=="], + "browserslist": ["browserslist@4.26.3", "", { "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w=="], "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], @@ -598,7 +609,7 @@ "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001727", "", {}, "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q=="], + "caniuse-lite": ["caniuse-lite@1.0.30001747", "", {}, "sha512-mzFa2DGIhuc5490Nd/G31xN1pnBnYMadtkyTjefPI7wzypqgCEpeWu9bJr0OnDsyKrW75zA9ZAt7pbQFmwLsQg=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -660,7 +671,7 @@ "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], - "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], @@ -678,7 +689,7 @@ "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], - "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + "detect-libc": ["detect-libc@2.1.1", "", {}, "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw=="], "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], @@ -690,9 +701,9 @@ "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], - "dotenv": ["dotenv@17.2.0", "", {}, "sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ=="], + "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], - "drizzle-kit": ["drizzle-kit@0.31.4", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA=="], + "drizzle-kit": ["drizzle-kit@0.31.5", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg=="], "drizzle-orm": ["drizzle-orm@0.43.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-dUcDaZtE/zN4RV/xqGrVSMpnEczxd5cIaoDeor7Zst9wOe/HzC/7eAaulywWGYXdDEc9oBPMjayVEDg0ziTLJA=="], @@ -706,11 +717,11 @@ "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], - "electron-to-chromium": ["electron-to-chromium@1.5.185", "", {}, "sha512-dYOZfUk57hSMPePoIQ1fZWl1Fkj+OshhEVuPacNKWzC1efe56OsHY3l/jCfiAgIICOU3VgOIdoq7ahg7r7n6MQ=="], + "electron-to-chromium": ["electron-to-chromium@1.5.230", "", {}, "sha512-A6A6Fd3+gMdaed9wX83CvHYJb4UuapPD5X5SLq72VZJzxHSY0/LUweGXRWmQlh2ln7KV7iw7jnwXK7dlPoOnHQ=="], "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], "es-abstract": ["es-abstract@1.24.0", "", { "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.4", "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.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "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-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.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.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="], @@ -728,7 +739,7 @@ "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.6", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.6", "@esbuild/android-arm": "0.25.6", "@esbuild/android-arm64": "0.25.6", "@esbuild/android-x64": "0.25.6", "@esbuild/darwin-arm64": "0.25.6", "@esbuild/darwin-x64": "0.25.6", "@esbuild/freebsd-arm64": "0.25.6", "@esbuild/freebsd-x64": "0.25.6", "@esbuild/linux-arm": "0.25.6", "@esbuild/linux-arm64": "0.25.6", "@esbuild/linux-ia32": "0.25.6", "@esbuild/linux-loong64": "0.25.6", "@esbuild/linux-mips64el": "0.25.6", "@esbuild/linux-ppc64": "0.25.6", "@esbuild/linux-riscv64": "0.25.6", "@esbuild/linux-s390x": "0.25.6", "@esbuild/linux-x64": "0.25.6", "@esbuild/netbsd-arm64": "0.25.6", "@esbuild/netbsd-x64": "0.25.6", "@esbuild/openbsd-arm64": "0.25.6", "@esbuild/openbsd-x64": "0.25.6", "@esbuild/openharmony-arm64": "0.25.6", "@esbuild/sunos-x64": "0.25.6", "@esbuild/win32-arm64": "0.25.6", "@esbuild/win32-ia32": "0.25.6", "@esbuild/win32-x64": "0.25.6" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg=="], + "esbuild": ["esbuild@0.25.10", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.10", "@esbuild/android-arm": "0.25.10", "@esbuild/android-arm64": "0.25.10", "@esbuild/android-x64": "0.25.10", "@esbuild/darwin-arm64": "0.25.10", "@esbuild/darwin-x64": "0.25.10", "@esbuild/freebsd-arm64": "0.25.10", "@esbuild/freebsd-x64": "0.25.10", "@esbuild/linux-arm": "0.25.10", "@esbuild/linux-arm64": "0.25.10", "@esbuild/linux-ia32": "0.25.10", "@esbuild/linux-loong64": "0.25.10", "@esbuild/linux-mips64el": "0.25.10", "@esbuild/linux-ppc64": "0.25.10", "@esbuild/linux-riscv64": "0.25.10", "@esbuild/linux-s390x": "0.25.10", "@esbuild/linux-x64": "0.25.10", "@esbuild/netbsd-arm64": "0.25.10", "@esbuild/netbsd-x64": "0.25.10", "@esbuild/openbsd-arm64": "0.25.10", "@esbuild/openbsd-x64": "0.25.10", "@esbuild/openharmony-arm64": "0.25.10", "@esbuild/sunos-x64": "0.25.10", "@esbuild/win32-arm64": "0.25.10", "@esbuild/win32-ia32": "0.25.10", "@esbuild/win32-x64": "0.25.10" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ=="], "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], @@ -736,9 +747,9 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "eslint": ["eslint@9.31.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.0", "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.31.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ=="], + "eslint": ["eslint@9.36.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.36.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ=="], - "eslint-config-next": ["eslint-config-next@15.4.1", "", { "dependencies": { "@next/eslint-plugin-next": "15.4.1", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-XIIN+lq8XuSwXUrcv+0uHMDFGJFPxLAw04/a4muFZYygSvStvVa15nY7kh4Il6yOVJyxdMUyVdQ9ApGedaeupw=="], + "eslint-config-next": ["eslint-config-next@15.5.4", "", { "dependencies": { "@next/eslint-plugin-next": "15.5.4", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw=="], "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], @@ -790,7 +801,7 @@ "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], - "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], @@ -806,13 +817,13 @@ "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], - "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], + "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "form-data": ["form-data@4.0.0", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="], + "form-data": ["form-data@4.0.4", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow=="], "form-data-encoder": ["form-data-encoder@1.7.2", "", {}, "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="], @@ -832,6 +843,8 @@ "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], + "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "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=="], @@ -902,7 +915,7 @@ "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], - "ibm-cloud-sdk-core": ["ibm-cloud-sdk-core@5.4.0", "", { "dependencies": { "@types/debug": "^4.1.12", "@types/node": "^18.19.80", "@types/tough-cookie": "^4.0.0", "axios": "^1.8.2", "camelcase": "^6.3.0", "debug": "^4.3.4", "dotenv": "^16.4.5", "extend": "3.0.2", "file-type": "16.5.4", "form-data": "4.0.0", "isstream": "0.1.2", "jsonwebtoken": "^9.0.2", "mime-types": "2.1.35", "retry-axios": "^2.6.0", "tough-cookie": "^4.1.3" } }, "sha512-c4cwOuUDbMiFROYM/Ti1aC+Umi1v3TdvC2DO5zR7w44FYY/3xrs79+3DVPXt/nRhJeaMHN2L9XwlXsPSoVDHJA=="], + "ibm-cloud-sdk-core": ["ibm-cloud-sdk-core@5.4.3", "", { "dependencies": { "@types/debug": "^4.1.12", "@types/node": "^18.19.80", "@types/tough-cookie": "^4.0.0", "axios": "^1.12.2", "camelcase": "^6.3.0", "debug": "^4.3.4", "dotenv": "^16.4.5", "extend": "3.0.2", "file-type": "16.5.4", "form-data": "^4.0.4", "isstream": "0.1.2", "jsonwebtoken": "^9.0.2", "mime-types": "2.1.35", "retry-axios": "^2.6.0", "tough-cookie": "^4.1.3" } }, "sha512-D0lvClcoCp/HXyaFlCbOT4aTYgGyeIb4ncxZpxRuiuw7Eo79C6c49W53+8WJRD9nxzT5vrIdaky3NBcTdBtaEg=="], "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], @@ -950,7 +963,7 @@ "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "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-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], @@ -1000,9 +1013,9 @@ "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "jose": ["jose@6.1.0", "", {}, "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA=="], - "js-tiktoken": ["js-tiktoken@1.0.20", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A=="], + "js-tiktoken": ["js-tiktoken@1.0.21", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g=="], "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], @@ -1034,9 +1047,9 @@ "langchain": ["langchain@0.3.30", "", { "dependencies": { "@langchain/openai": ">=0.1.0 <0.7.0", "@langchain/textsplitters": ">=0.0.0 <0.2.0", "js-tiktoken": "^1.0.12", "js-yaml": "^4.1.0", "jsonpointer": "^5.0.1", "langsmith": "^0.3.33", "openapi-types": "^12.1.3", "p-retry": "4", "uuid": "^10.0.0", "yaml": "^2.2.1", "zod": "^3.25.32" }, "peerDependencies": { "@langchain/anthropic": "*", "@langchain/aws": "*", "@langchain/cerebras": "*", "@langchain/cohere": "*", "@langchain/core": ">=0.3.58 <0.4.0", "@langchain/deepseek": "*", "@langchain/google-genai": "*", "@langchain/google-vertexai": "*", "@langchain/google-vertexai-web": "*", "@langchain/groq": "*", "@langchain/mistralai": "*", "@langchain/ollama": "*", "@langchain/xai": "*", "axios": "*", "cheerio": "*", "handlebars": "^4.7.8", "peggy": "^3.0.2", "typeorm": "*" }, "optionalPeers": ["@langchain/anthropic", "@langchain/aws", "@langchain/cerebras", "@langchain/cohere", "@langchain/deepseek", "@langchain/google-genai", "@langchain/google-vertexai", "@langchain/google-vertexai-web", "@langchain/groq", "@langchain/mistralai", "@langchain/ollama", "@langchain/xai", "axios", "cheerio", "handlebars", "peggy", "typeorm"] }, "sha512-UyVsfwHDpHbrnWrjWuhJHqi8Non+Zcsf2kdpDTqyJF8NXrHBOpjdHT5LvPuW9fnE7miDTWf5mLcrWAGZgcrznQ=="], - "langgraph-nextjs-api-passthrough": ["langgraph-nextjs-api-passthrough@0.1.3", "", { "peerDependencies": { "next": "*" } }, "sha512-bNxx+az3TsU5M4T1WuWV1dOwJLhyKH5WD1b6v4R3+PGWyqhgKKAoXvKux2V4Cg7YkyRukl1kTxXMXxpONLkQIQ=="], + "langgraph-nextjs-api-passthrough": ["langgraph-nextjs-api-passthrough@0.1.4", "", { "peerDependencies": { "next": "*" } }, "sha512-qGjHs8AnyP5XxxparmqkW4H6fHLjAgveCQnKzpBg0QhgyCc5wbGXmjCsh6eMgZ0meT+WS2oy31kNlt7OwPqSig=="], - "langsmith": ["langsmith@0.3.46", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "@opentelemetry/api": "*", "@opentelemetry/exporter-trace-otlp-proto": "*", "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/exporter-trace-otlp-proto", "@opentelemetry/sdk-trace-base", "openai"] }, "sha512-Hhi4/cMjhWIGpu0DW5eQrXBbeeKQWPYYQyJCYzhFjod+xinMry4i8QR0gxrrgjGOgfMuU6nyK79YqjGTEPVbDA=="], + "langsmith": ["langsmith@0.3.72", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "@opentelemetry/api": "*", "@opentelemetry/exporter-trace-otlp-proto": "*", "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/exporter-trace-otlp-proto", "@opentelemetry/sdk-trace-base", "openai"] }, "sha512-XjTonMq2fIebzV0BRlPx8mi+Ih/NsQT6W484hrW/pJYuq0aT5kpLtzQthVVmsXH8ZYYkgkbQ5Gh5Mz1qoCrAwg=="], "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], @@ -1158,8 +1171,6 @@ "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1168,9 +1179,9 @@ "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], - "nanoid": ["nanoid@5.1.5", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="], + "nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], - "napi-postinstall": ["napi-postinstall@0.3.0", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA=="], + "napi-postinstall": ["napi-postinstall@0.3.3", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow=="], "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], @@ -1178,9 +1189,9 @@ "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "nice-grpc": ["nice-grpc@2.1.12", "", { "dependencies": { "@grpc/grpc-js": "^1.13.1", "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-J1n4Wg+D3IhRhGQb+iqh2OpiM0GzTve/kf2lnlW4S+xczmIEd0aHUDV1OsJ5a3q8GSTqJf+s4Rgg1M8uJltarw=="], + "nice-grpc": ["nice-grpc@2.1.13", "", { "dependencies": { "@grpc/grpc-js": "^1.14.0", "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-IkXNok2NFyYh0WKp1aJFwFV3Ue2frBkJ16ojrmgX3Tc9n0g7r0VU+ur3H/leDHPPGsEeVozdMynGxYT30k3D/Q=="], - "nice-grpc-client-middleware-retry": ["nice-grpc-client-middleware-retry@3.1.11", "", { "dependencies": { "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-xW/imz/kNG2g0DwTfH2eYEGrg1chSLrXtvGp9fg2qkhTgGFfAS/Pq3+t+9G8KThcC4hK/xlEyKvZWKk++33S6A=="], + "nice-grpc-client-middleware-retry": ["nice-grpc-client-middleware-retry@3.1.12", "", { "dependencies": { "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-CHKIeHznAePOsT2dLeGwoOFaybQz6LvkIsFfN8SLcyGyTR7AB6vZMaECJjx+QPL8O2qVgaVE167PdeOmQrPuag=="], "nice-grpc-common": ["nice-grpc-common@2.0.2", "", { "dependencies": { "ts-error": "^1.0.6" } }, "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ=="], @@ -1192,7 +1203,7 @@ "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + "node-releases": ["node-releases@2.0.21", "", {}, "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw=="], "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], @@ -1202,9 +1213,9 @@ "npm-run-all": ["npm-run-all@4.1.5", "", { "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" }, "bin": { "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js", "npm-run-all": "bin/npm-run-all/index.js" } }, "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ=="], - "nuqs": ["nuqs@2.4.3", "", { "dependencies": { "mitt": "^3.0.1" }, "peerDependencies": { "@remix-run/react": ">=2", "next": ">=14.2.0", "react": ">=18.2.0 || ^19.0.0-0", "react-router": "^6 || ^7", "react-router-dom": "^6 || ^7" }, "optionalPeers": ["@remix-run/react", "next", "react-router", "react-router-dom"] }, "sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q=="], + "nuqs": ["nuqs@2.7.0", "", { "dependencies": { "@standard-schema/spec": "1.0.0" }, "peerDependencies": { "@remix-run/react": ">=2", "@tanstack/react-router": "^1", "next": ">=14.2.0", "react": ">=18.2.0 || ^19.0.0-0", "react-router": "^6 || ^7", "react-router-dom": "^6 || ^7" }, "optionalPeers": ["@remix-run/react", "@tanstack/react-router", "next", "react-router", "react-router-dom"] }, "sha512-p6j6AuOVbnIlMSOlymKVDQtDkSCgjKxikwrqE9zThEOrP0UMfB/dwHuc6nKCuBPveoNghbh15zwoyTTv0XLp+A=="], - "oauth4webapi": ["oauth4webapi@3.5.5", "", {}, "sha512-1K88D2GiAydGblHo39NBro5TebGXa+7tYoyIbxvqv3+haDDry7CBE1eSYuNbOSsYCCU6y0gdynVZAkm4YPw4hg=="], + "oauth4webapi": ["oauth4webapi@3.8.2", "", {}, "sha512-FzZZ+bht5X0FKe7Mwz3DAVAmlH1BV5blSak/lHMBKz0/EBMhX6B10GlQYI51+oRp8ObJaX0g6pXrAxZh5s8rjw=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -1224,13 +1235,13 @@ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "openai": ["openai@5.9.2", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-d7t/lRkwZpSwIk7GW3EHRSGAlsuoi1WL6VhCO02raEzZO2ahEVAbWn3WmOcpeh9zF6xF9weJXoVeDkWJRz+SHA=="], + "openai": ["openai@5.23.2", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg=="], "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], "opener": ["opener@1.5.2", "", { "bin": { "opener": "bin/opener-bin.js" } }, "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="], - "openid-client": ["openid-client@6.6.2", "", { "dependencies": { "jose": "^6.0.11", "oauth4webapi": "^3.5.4" } }, "sha512-Xya5TNMnnZuTM6DbHdB4q0S3ig2NTAELnii/ASie1xDEr8iiB8zZbO871OWBdrw++sd3hW6bqWjgcmSy1RTWHA=="], + "openid-client": ["openid-client@6.8.1", "", { "dependencies": { "jose": "^6.1.0", "oauth4webapi": "^3.8.2" } }, "sha512-VoYT6enBo6Vj2j3Q5Ec0AezS+9YGzQo1f5Xc42lreMGlfP4ljiXPKVDvCADh+XHCV/bqPu/wWSiCVXbJKvrODw=="], "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], @@ -1296,9 +1307,9 @@ "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], - "playwright": ["playwright@1.54.1", "", { "dependencies": { "playwright-core": "1.54.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g=="], + "playwright": ["playwright@1.55.1", "", { "dependencies": { "playwright-core": "1.55.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A=="], - "playwright-core": ["playwright-core@1.54.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA=="], + "playwright-core": ["playwright-core@1.55.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], @@ -1306,7 +1317,7 @@ "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], - "postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="], + "postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw=="], "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], @@ -1336,7 +1347,7 @@ "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], - "protobufjs": ["protobufjs@7.5.3", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw=="], + "protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], @@ -1440,7 +1451,7 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], + "simple-swizzle": ["simple-swizzle@0.2.4", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw=="], "simple-wcswidth": ["simple-wcswidth@1.1.2", "", {}, "sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw=="], @@ -1462,7 +1473,7 @@ "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], - "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="], + "spdx-license-ids": ["spdx-license-ids@3.0.22", "", {}, "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="], "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], @@ -1494,7 +1505,7 @@ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -1516,7 +1527,7 @@ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "swr": ["swr@2.3.4", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg=="], + "swr": ["swr@2.3.6", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw=="], "tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="], @@ -1532,7 +1543,7 @@ "tiny-async-pool": ["tiny-async-pool@2.1.0", "", {}, "sha512-ltAHPh/9k0STRQqaoUX52NH4ZQYAJz24ZAEwf1Zm+HYg3l9OXTWeqWKyYsHu40wF/F0rxd2N2bk5sLvX2qlSvg=="], - "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "tinyqueue": ["tinyqueue@3.0.0", "", {}, "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g=="], @@ -1560,7 +1571,7 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tsx": ["tsx@4.20.3", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ=="], + "tsx": ["tsx@4.20.6", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg=="], "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], @@ -1574,7 +1585,7 @@ "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], - "ua-parser-js": ["ua-parser-js@1.0.40", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew=="], + "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], "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=="], @@ -1610,7 +1621,7 @@ "use-stick-to-bottom": ["use-stick-to-bottom@1.1.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng=="], - "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=="], + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], @@ -1622,9 +1633,9 @@ "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "weaviate-client": ["weaviate-client@3.8.0", "", { "dependencies": { "abort-controller-x": "^0.4.3", "graphql": "^16.11.0", "graphql-request": "^6.1.0", "long": "^5.3.2", "nice-grpc": "^2.1.12", "nice-grpc-client-middleware-retry": "^3.1.11", "nice-grpc-common": "^2.0.2", "uuid": "^9.0.1" } }, "sha512-8yWNY3OIAh1H/W+414o17em/3CSDc5f4/sMjCrFksVppczHC1mB1f0fCFosg9fpQGegLT+Ll6un82sTGYxFhqw=="], + "weaviate-client": ["weaviate-client@3.9.0", "", { "dependencies": { "abort-controller-x": "^0.4.3", "graphql": "^16.11.0", "graphql-request": "^6.1.0", "long": "^5.3.2", "nice-grpc": "^2.1.12", "nice-grpc-client-middleware-retry": "^3.1.11", "nice-grpc-common": "^2.0.2", "uuid": "^9.0.1" } }, "sha512-7qwg7YONAaT4zWnohLrFdzky+rZegVe76J+Tky/+7tuyvjFpdKgSrdqI/wPDh8aji0ZGZrL4DdGwGfFnZ+uV4w=="], "web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], @@ -1656,7 +1667,7 @@ "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "yaml": ["yaml@2.8.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], + "yaml": ["yaml@2.8.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="], "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], @@ -1670,11 +1681,13 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.119", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg=="], + "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.129", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A=="], + + "@auth0/ai/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "@browserbasehq/sdk/@types/node": ["@types/node@18.19.119", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg=="], + "@auth0/nextjs-auth0/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "@browserbasehq/stagehand/openai": ["openai@4.104.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA=="], + "@browserbasehq/sdk/@types/node": ["@types/node@18.19.129", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A=="], "@browserbasehq/stagehand/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], @@ -1682,18 +1695,16 @@ "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], - - "@ibm-cloud/watsonx-ai/@types/node": ["@types/node@18.19.119", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg=="], + "@ibm-cloud/watsonx-ai/@types/node": ["@types/node@18.19.129", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A=="], "@langchain/core/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + "@langchain/langgraph/@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.1.9", "", { "dependencies": { "@types/json-schema": "^7.0.15", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^9.0.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0 || ^1.0.0-alpha", "react": "^18 || ^19", "react-dom": "^18 || ^19" }, "optionalPeers": ["@langchain/core", "react", "react-dom"] }, "sha512-7WEDHtbI3pYPUiiHq+dPaF92ZN2W7lqObdpK0X+roa8zPdHUjve/HiqYuKNWS12u1N+L5QIuQWqZvVNvUA7BfQ=="], + "@langchain/langgraph-sdk/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], - "@types/node-fetch/form-data": ["form-data@4.0.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA=="], - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -1704,8 +1715,6 @@ "auth0/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "axios/form-data": ["form-data@4.0.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA=="], - "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -1736,7 +1745,7 @@ "googleapis-common/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "ibm-cloud-sdk-core/@types/node": ["@types/node@18.19.119", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg=="], + "ibm-cloud-sdk-core/@types/node": ["@types/node@18.19.129", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A=="], "ibm-cloud-sdk-core/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], @@ -1756,8 +1765,6 @@ "npm-run-all/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], - "openid-client/jose": ["jose@6.0.12", "", {}, "sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ=="], - "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "pdf-parse/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -1770,7 +1777,7 @@ "sharp/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "simple-swizzle/is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], + "simple-swizzle/is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="], "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1784,7 +1791,7 @@ "weaviate-client/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -1798,8 +1805,6 @@ "@browserbasehq/sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "@browserbasehq/stagehand/openai/@types/node": ["@types/node@18.19.119", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg=="], - "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], @@ -1846,6 +1851,8 @@ "@ibm-cloud/watsonx-ai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + "@langchain/langgraph/@langchain/langgraph-sdk/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], @@ -1892,8 +1899,6 @@ "yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@browserbasehq/stagehand/openai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], diff --git a/ts-langchain/langgraph.json b/ts-langchain/langgraph.json index dd8e471..f54eac1 100644 --- a/ts-langchain/langgraph.json +++ b/ts-langchain/langgraph.json @@ -3,6 +3,9 @@ "graphs": { "agent": "./src/lib/agent.ts:agent" }, + "auth": { + "path": "./src/lib/auth.ts:authHandler" + }, "env": ".env.local", "dependencies": ["."] } diff --git a/ts-langchain/package.json b/ts-langchain/package.json index 1757208..823e873 100644 --- a/ts-langchain/package.json +++ b/ts-langchain/package.json @@ -25,12 +25,15 @@ "node": ">=18" }, "dependencies": { - "@auth0/ai-langchain": "3.2.0", + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", + "@auth0/ai-langchain": "file:auth0-ai-langchain-0.0.0.tgz", "@auth0/nextjs-auth0": "4.8.0", - "@langchain/community": "0.3.49", - "@langchain/core": "0.3.63", - "@langchain/langgraph": "0.3.8", + "@langchain/community": "^0.3.53", + "@langchain/core": "^0.3.72", + "@langchain/langgraph": "^0.4.6", + "@langchain/langgraph-sdk": "^0.0.109", "@langchain/openai": "0.6.1", + "@openfga/sdk": "^0.8.0", "@radix-ui/react-avatar": "^1.1.7", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dialog": "^1.1.11", @@ -45,8 +48,9 @@ "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", "googleapis": "^148.0.0", + "jose": "^6.1.0", "langchain": "0.3.30", - "langgraph-nextjs-api-passthrough": "0.1.3", + "langgraph-nextjs-api-passthrough": "^0.1.4", "lucide-react": "^0.475.0", "marked": "^15.0.7", "nanoid": "^5.1.5", @@ -85,5 +89,8 @@ "tailwindcss": "3.4.17", "tsx": "^4.19.4", "typescript": "5.7.3" + }, + "resolutions": { + "@auth0/ai": "file:auth0-ai-0.0.0.tgz" } } diff --git a/ts-langchain/src/app/api/chat/[..._path]/route.ts b/ts-langchain/src/app/api/chat/[..._path]/route.ts index af7c591..5456203 100644 --- a/ts-langchain/src/app/api/chat/[..._path]/route.ts +++ b/ts-langchain/src/app/api/chat/[..._path]/route.ts @@ -1,23 +1,26 @@ import { initApiPassthrough } from 'langgraph-nextjs-api-passthrough'; -import { getRefreshToken, getAccessToken, getUser } from '@/lib/auth0'; +import { getAccessToken, getUser } from '@/lib/auth0'; -const getCredentials = async () => ({ - refreshToken: await getRefreshToken(), - accessToken: await getAccessToken(), - user: await getUser(), -}); export const { GET, POST, PUT, PATCH, DELETE, OPTIONS, runtime } = initApiPassthrough({ apiUrl: process.env.LANGGRAPH_API_URL, baseRoute: 'chat/', + headers: async () => { + const accessToken = await getAccessToken(); + return { + Authorization: `Bearer ${accessToken}`, + }; + }, bodyParameters: async (req, body) => { if (req.nextUrl.pathname.endsWith('/runs/stream') && req.method === 'POST') { return { ...body, config: { configurable: { - _credentials: await getCredentials(), + _credentials: { + user: await getUser(), + } }, }, }; diff --git a/ts-langchain/src/components/auth0-ai/FederatedConnections/index.tsx b/ts-langchain/src/components/auth0-ai/FederatedConnections/index.tsx deleted file mode 100644 index 8109c78..0000000 --- a/ts-langchain/src/components/auth0-ai/FederatedConnections/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { BrowserView, MobileView } from 'react-device-detect'; - -import { FederatedConnectionAuthProps } from './FederatedConnectionAuthProps'; -import { EnsureAPIAccessPopup } from './popup'; -import { EnsureAPIAccessRedirect } from './redirect'; - -export function EnsureAPIAccess(props: FederatedConnectionAuthProps) { - const { mode } = props; - - switch (mode) { - case 'popup': - return ; - case 'redirect': - return ; - case 'auto': - default: - return ( - <> - - - - - - - - ); - } -} diff --git a/ts-langchain/src/components/auth0-ai/FederatedConnections/FederatedConnectionAuthProps.tsx b/ts-langchain/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx similarity index 95% rename from ts-langchain/src/components/auth0-ai/FederatedConnections/FederatedConnectionAuthProps.tsx rename to ts-langchain/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx index 19344cb..5c060ea 100644 --- a/ts-langchain/src/components/auth0-ai/FederatedConnections/FederatedConnectionAuthProps.tsx +++ b/ts-langchain/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx @@ -9,7 +9,7 @@ import { ReactNode } from 'react'; */ export type AuthComponentMode = 'redirect' | 'popup' | 'auto'; -export type FederatedConnectionAuthProps = { +export type TokenVaultAuthProps = { interrupt: { connection: string; requiredScopes: string[]; diff --git a/ts-langchain/src/components/auth0-ai/FederatedConnections/FederatedConnectionInterruptHandler.tsx b/ts-langchain/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx similarity index 54% rename from ts-langchain/src/components/auth0-ai/FederatedConnections/FederatedConnectionInterruptHandler.tsx rename to ts-langchain/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx index dfdfd8a..ec4da83 100644 --- a/ts-langchain/src/components/auth0-ai/FederatedConnections/FederatedConnectionInterruptHandler.tsx +++ b/ts-langchain/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx @@ -1,21 +1,21 @@ -import { FederatedConnectionInterrupt } from '@auth0/ai/interrupts'; +import { TokenVaultInterrupt } from '@auth0/ai/interrupts'; import type { Interrupt } from '@langchain/langgraph-sdk'; -import { EnsureAPIAccess } from '@/components/auth0-ai/FederatedConnections'; +import { TokenVaultConsent } from '@/components/auth0-ai/TokenVault'; -interface FederatedConnectionInterruptHandlerProps { +interface TokenVaultInterruptHandlerProps { interrupt: Interrupt | undefined | null; onFinish: () => void; } -export function FederatedConnectionInterruptHandler({ interrupt, onFinish }: FederatedConnectionInterruptHandlerProps) { - if (!interrupt || !FederatedConnectionInterrupt.isInterrupt(interrupt.value)) { +export function TokenVaultInterruptHandler({ interrupt, onFinish }: TokenVaultInterruptHandlerProps) { + if (!interrupt || !TokenVaultInterrupt.isInterrupt(interrupt.value)) { return null; } return (
- ; + case 'redirect': + return ; + case 'auto': + default: + return ( + <> + + + + + + + + ); + } +} diff --git a/ts-langchain/src/components/auth0-ai/FederatedConnections/popup.tsx b/ts-langchain/src/components/auth0-ai/TokenVault/popup.tsx similarity index 93% rename from ts-langchain/src/components/auth0-ai/FederatedConnections/popup.tsx rename to ts-langchain/src/components/auth0-ai/TokenVault/popup.tsx index cc1abda..436777b 100644 --- a/ts-langchain/src/components/auth0-ai/FederatedConnections/popup.tsx +++ b/ts-langchain/src/components/auth0-ai/TokenVault/popup.tsx @@ -4,14 +4,14 @@ import { useCallback, useEffect, useState } from 'react'; import { WaitingMessage } from '../util/loader'; import { PromptUserContainer } from '../util/prompt-user-container'; -import { FederatedConnectionAuthProps } from './FederatedConnectionAuthProps'; +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; -export function EnsureAPIAccessPopup({ +export function TokenVaultConsentPopup({ interrupt: { connection, requiredScopes, resume }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = '/auth/login', returnTo = '/close' } = {}, onFinish, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { const [isLoading, setIsLoading] = useState(false); const [loginPopup, setLoginPopup] = useState(null); diff --git a/ts-langchain/src/components/auth0-ai/FederatedConnections/redirect.tsx b/ts-langchain/src/components/auth0-ai/TokenVault/redirect.tsx similarity index 86% rename from ts-langchain/src/components/auth0-ai/FederatedConnections/redirect.tsx rename to ts-langchain/src/components/auth0-ai/TokenVault/redirect.tsx index 51c45ca..c29e635 100644 --- a/ts-langchain/src/components/auth0-ai/FederatedConnections/redirect.tsx +++ b/ts-langchain/src/components/auth0-ai/TokenVault/redirect.tsx @@ -1,13 +1,13 @@ 'use client'; import { PromptUserContainer } from '../util/prompt-user-container'; -import { FederatedConnectionAuthProps } from './FederatedConnectionAuthProps'; +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; -export function EnsureAPIAccessRedirect({ +export function TokenVaultConsentRedirect({ interrupt: { requiredScopes, connection }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = '/auth/login', returnTo = window.location.pathname } = {}, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { return ( 0 ? ( +function ToolCallDisplay({ + toolCall, + isRunning, + messageContent +}: { + toolCall: NonNullable[0]; + isRunning: boolean; + messageContent?: string; +}) { + return ( +
+
+ {isRunning ? ( + + ) : ( + + )} + + {isRunning ? `Calling ${toolCall.name}...` : `Called ${toolCall.name}`} + +
+ + {/* Show tool arguments/input */} + {toolCall.args && Object.keys(toolCall.args).length > 0 && ( +
+
Input:
+
+ {JSON.stringify(toolCall.args, null, 2)} +
+
+ )} + + {/* Show tool result/output */} + {messageContent && !isRunning && ( +
+
Output:
+
+ + {messageContent} + +
+
+ )} +
+ ); +} + +export function ChatMessageBubble(props: { message: Message; aiEmoji?: string; allMessages?: Message[] }) { + const toolCalls = props.message.type === 'ai' ? props.message.tool_calls || [] : []; + + // Get message content as string + const getMessageContent = (message: Message): string => { + if (typeof message.content === 'string') { + return message.content; + } + if (Array.isArray(message.content)) { + return message.content + .map(part => { + if (typeof part === 'string') return part; + if (typeof part === 'object' && 'text' in part) return part.text; + return ''; + }) + .join(''); + } + return ''; + }; + + const content = getMessageContent(props.message); + const hasContent = content.length > 0; + const hasToolCalls = toolCalls.length > 0; + + // Check if tool calls have corresponding tool result messages + const hasToolResults = hasToolCalls && props.allMessages && toolCalls.some(toolCall => + props.allMessages!.some(msg => + msg.type === 'tool' && + 'tool_call_id' in msg && + msg.tool_call_id === toolCall.id + ) + ); + + // Simple logic: Running = tool calls exist but no tool result messages yet + const isRunning = hasToolCalls && !hasToolResults; + + // Get tool result content for display + const getToolResultContent = () => { + if (!hasToolCalls || !props.allMessages) return ''; + + for (const toolCall of toolCalls) { + const toolResult = props.allMessages.find(msg => + msg.type === 'tool' && + 'tool_call_id' in msg && + msg.tool_call_id === toolCall.id + ); + if (toolResult) { + return getMessageContent(toolResult); + } + } + return ''; + }; + + const toolResultContent = getToolResultContent(); + + // Show tool calls if we have any + const shouldShowToolCalls = hasToolCalls; + + if (!(['human', 'ai'].includes(props.message.type) && (hasContent || shouldShowToolCalls))) { + return null; + } + + return (
)}
- + {shouldShowToolCalls && ( +
+ {toolCalls.map((toolCall) => ( + + ))} +
+ )} + {hasContent && ( + + )}
- ) : null; -} + ); +} \ No newline at end of file diff --git a/ts-langchain/src/components/chat-window.tsx b/ts-langchain/src/components/chat-window.tsx index 9048c99..b73e986 100644 --- a/ts-langchain/src/components/chat-window.tsx +++ b/ts-langchain/src/components/chat-window.tsx @@ -9,7 +9,7 @@ import { useQueryState } from 'nuqs'; import { useStream } from '@langchain/langgraph-sdk/react'; import { type Message } from '@langchain/langgraph-sdk'; -import { FederatedConnectionInterruptHandler } from '@/components/auth0-ai/FederatedConnections/FederatedConnectionInterruptHandler'; +import { TokenVaultInterruptHandler } from '@/components/auth0-ai/TokenVault/TokenVaultInterruptHandler'; import { ChatMessageBubble } from '@/components/chat-message-bubble'; import { Button } from '@/components/ui/button'; import { cn } from '@/utils/cn'; @@ -23,7 +23,7 @@ function ChatMessages(props: { return (
{props.messages.map((m, i) => { - return ; + return ; })}
); @@ -162,7 +162,7 @@ export function ChatWindow(props: { emptyStateComponent={props.emptyStateComponent} />
- chat.submit(null)} /> + chat.submit(null)} />
) diff --git a/ts-langchain/src/lib/auth.ts b/ts-langchain/src/lib/auth.ts new file mode 100644 index 0000000..a8de8f1 --- /dev/null +++ b/ts-langchain/src/lib/auth.ts @@ -0,0 +1,101 @@ +import { createRemoteJWKSet, jwtVerify } from "jose"; + +// eslint-disable-next-line @typescript-eslint/no-require-imports +const { Auth, HTTPException } = require("@langchain/langgraph-sdk/auth"); + +const AUTH0_DOMAIN = process.env.AUTH0_DOMAIN; +const AUTH0_AUDIENCE = process.env.AUTH0_AUDIENCE; + +if (!AUTH0_DOMAIN || !AUTH0_AUDIENCE) { + throw new Error( + "Missing AUTH0_DOMAIN or AUTH0_AUDIENCE environment variables" + ); +} + +// JWKS endpoint for Auth0 +const JWKS = createRemoteJWKSet( + new URL(`https://${AUTH0_DOMAIN}/.well-known/jwks.json`) +); + +// Create the Auth instance +const auth = new Auth(); + +// Register the authentication handler +auth.authenticate(async (request: Request) => { + const authHeader = request.headers.get("Authorization") || undefined; + const xApiKeyHeader = request.headers.get("x-api-key") || undefined; + try { + /** + * LangGraph Platform will convert the `Authorization` header from the client to an `x-api-key` header automatically + * as of now: https://docs.langchain.com/langgraph-platform/custom-auth + * + * We can still leverage the `Authorization` header when served in other infrastructure w/ langgraph-cli + * or when running locally. + */ + // This header is required in Langgraph Cloud. + if (!authHeader && !xApiKeyHeader) { + throw new HTTPException(401, { + message: "Invalid auth header provided.", + }); + } + + // prefer the xApiKeyHeader first + let token = xApiKeyHeader || authHeader; + + // Remove "Bearer " prefix if present + if (token && token.startsWith("Bearer ")) { + token = token.substring(7); + } + + // Validate Auth0 Access Token using common JWKS endpoint + if (!token) { + throw new HTTPException(401, { + message: + "Authorization header format must be of the form: Bearer ", + }); + } + + if (token) { + try { + // Verify the JWT using Auth0 JWKS + const { payload } = await jwtVerify(token, JWKS, { + issuer: `https://${AUTH0_DOMAIN}/`, + audience: AUTH0_AUDIENCE, + }); + + console.log("✅ Auth0 JWT payload resolved!", payload); + + // Return the verified payload - this becomes available in graph nodes + return { + identity: payload.sub!, + email: payload.email as string, + permissions: + typeof payload.scope === "string" ? payload.scope.split(" ") : [], + auth_type: "auth0", + // include the access token for use with Auth0 Token Vault exchanges by tools + getRawAccessToken: () => token, + // Add any other claims you need + ...payload, + }; + } catch (jwtError) { + console.log( + "❌ Auth0 JWT validation failed:", + jwtError instanceof Error ? jwtError.message : "Unknown error" + ); + throw new HTTPException(401, { + message: "Invalid Authorization token provided.", + }); + } + } + + // If we get here, no valid authentication was found + throw new Error("No valid authentication found."); + } catch (error) { + console.error("❌ Authentication failed:", error); + throw new Error( + `Authentication failed: ${error instanceof Error ? error.message : "Unknown error"}` + ); + } +}); + +export { auth as authHandler }; \ No newline at end of file diff --git a/ts-langchain/src/lib/auth0-ai.ts b/ts-langchain/src/lib/auth0-ai.ts index ff4a7c2..ea09c8c 100644 --- a/ts-langchain/src/lib/auth0-ai.ts +++ b/ts-langchain/src/lib/auth0-ai.ts @@ -1,23 +1,39 @@ -import { Auth0AI, getAccessTokenForConnection } from '@auth0/ai-langchain'; +import { Auth0AI, getAccessTokenFromTokenVault } from '@auth0/ai-langchain'; import { AccessDeniedInterrupt } from '@auth0/ai/interrupts'; +import { SUBJECT_TOKEN_TYPES } from "@auth0/ai"; // Get the access token for a connection via Auth0 -export const getAccessToken = async () => getAccessTokenForConnection(); +export const getAccessToken = async () => getAccessTokenFromTokenVault(); -const auth0AI = new Auth0AI(); +// Note: we use the Custom API Client when using Token Vault connections that access third party services +const auth0AICustomAPI = new Auth0AI({ + auth0: { + domain: process.env.AUTH0_DOMAIN!, + clientId: process.env.AUTH0_CUSTOM_API_CLIENT_ID!, + clientSecret: process.env.AUTH0_CUSTOM_API_CLIENT_SECRET!, + }, +}); // Connection for Google services -export const withGoogleConnection = auth0AI.withTokenForConnection({ +export const withGoogleConnection = auth0AICustomAPI.withTokenVault({ connection: 'google-oauth2', scopes: [ 'https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/gmail.compose', 'https://www.googleapis.com/auth/calendar.events', ], + accessToken: async (_, config) => { + return config.configurable?.langgraph_auth_user?.getRawAccessToken(); + }, + subjectTokenType: SUBJECT_TOKEN_TYPES.SUBJECT_TYPE_ACCESS_TOKEN, }); -// CIBA flow for user confirmation -export const withAsyncAuthorization = auth0AI.withAsyncUserConfirmation({ +// Async Authorization flow for user confirmation +// Note: you must use a client application that has the CIBA grant type enabled +// in this case, we can use auth0 regular web app client +const auth0AI = new Auth0AI(); + +export const withAsyncAuthorization = auth0AI.withAsyncAuthorization({ userID: async (_params, config) => { return config?.configurable?._credentials?.user?.sub; }, @@ -26,16 +42,34 @@ export const withAsyncAuthorization = auth0AI.withAsyncUserConfirmation({ audience: process.env['SHOP_API_AUDIENCE']!, /** + * Note: setting a requestedExpiry to >= 301 will currently ensure email is used. Otherwise, + * the default is to use push notification if available. + */ + // requestedExpiry: 301, + + /** + * The behavior when the authorization request is made. + * + * - `block`: The tool execution is blocked until the user completes the authorization. + * - `interrupt`: The tool execution is interrupted until the user completes the authorization. + * - a callback: Same as "block" but give access to the auth request and executing logic. + * + * Defaults to `interrupt`. + * * When this flag is set to `block`, the execution of the tool awaits * until the user approves or rejects the request. - * * Given the asynchronous nature of the CIBA flow, this mode * is only useful during development. * * In practice, the process that is awaiting the user confirmation * could crash or timeout before the user approves the request. */ - onAuthorizationRequest: 'block', + onAuthorizationRequest: async (authReq, creds) => { + console.log(`An authorization request was sent to your mobile device or your email.`); + await creds; + console.log(`Thanks for approving the order.`); + }, + onUnauthorized: async (e: Error) => { console.error('Error:', e); if (e instanceof AccessDeniedInterrupt) { diff --git a/ts-langchain/src/lib/auth0.ts b/ts-langchain/src/lib/auth0.ts index ed9d5ef..7e7533c 100644 --- a/ts-langchain/src/lib/auth0.ts +++ b/ts-langchain/src/lib/auth0.ts @@ -1,17 +1,23 @@ import { Auth0Client } from '@auth0/nextjs-auth0/server'; -export const auth0 = new Auth0Client(); - -// Get the refresh token from Auth0 session -export const getRefreshToken = async () => { - const session = await auth0.getSession(); - return session?.tokenSet?.refreshToken; -}; +export const auth0 = new Auth0Client({ + authorizationParameters: { + // In v4, the AUTH0_SCOPE and AUTH0_AUDIENCE environment variables are no longer automatically picked up by the SDK. + // Instead, we need to provide the values explicitly. + scope: process.env.AUTH0_SCOPE, + audience: process.env.AUTH0_AUDIENCE, + }, +}); // Get the Access token from Auth0 session export const getAccessToken = async () => { - const session = await auth0.getSession(); - return session?.tokenSet?.accessToken; + const tokenResult = await auth0.getAccessToken(); + + if(!tokenResult || !tokenResult.token) { + throw new Error("No access token found in Auth0 session"); + } + + return tokenResult.token; }; export const getUser = async () => { diff --git a/ts-langchain/src/lib/tools/google-calender.ts b/ts-langchain/src/lib/tools/google-calender.ts index 4b568b7..4cfcbaa 100644 --- a/ts-langchain/src/lib/tools/google-calender.ts +++ b/ts-langchain/src/lib/tools/google-calender.ts @@ -3,7 +3,7 @@ import { endOfDay, formatISO, startOfDay } from 'date-fns'; import { GaxiosError } from 'gaxios'; import { google } from 'googleapis'; import { z } from 'zod'; -import { FederatedConnectionError } from '@auth0/ai/interrupts'; +import { TokenVaultError } from '@auth0/ai/interrupts'; import { getAccessToken } from '../auth0-ai'; @@ -57,7 +57,7 @@ export const getCalendarEventsTool = tool( } catch (error) { if (error instanceof GaxiosError) { if (error.status === 401) { - throw new FederatedConnectionError(`Authorization required to access the Federated Connection`); + throw new TokenVaultError(`Authorization required to access the Token Vault connection.`); } } diff --git a/ts-langchain/src/lib/tools/shop-online.ts b/ts-langchain/src/lib/tools/shop-online.ts index 5ea6a68..d0f53db 100644 --- a/ts-langchain/src/lib/tools/shop-online.ts +++ b/ts-langchain/src/lib/tools/shop-online.ts @@ -1,7 +1,7 @@ import { tool } from '@langchain/core/tools'; import { z } from 'zod'; -import { getCIBACredentials } from '@auth0/ai-langchain'; +import { getAsyncAuthorizationCredentials } from '@auth0/ai-langchain'; export const shopOnlineTool = tool( async ({ product, qty, priceLimit }) => { @@ -24,7 +24,7 @@ export const shopOnlineTool = tool( priceLimit, }; - const credentials = getCIBACredentials(); + const credentials = getAsyncAuthorizationCredentials(); const accessToken = credentials?.accessToken; if (accessToken) { diff --git a/ts-langchain/src/lib/tools/user-info.ts b/ts-langchain/src/lib/tools/user-info.ts index dfe02b6..55d8246 100644 --- a/ts-langchain/src/lib/tools/user-info.ts +++ b/ts-langchain/src/lib/tools/user-info.ts @@ -3,7 +3,7 @@ import { tool } from '@langchain/core/tools'; export const getUserInfoTool = tool( async (_input, config?) => { // Access credentials from config - const accessToken = config?.configurable?._credentials?.accessToken; + const accessToken = config?.configurable?.langgraph_auth_user?.getRawAccessToken(); if (!accessToken) { return 'There is no user logged in.'; } From e6c8abfc2b5f07c1a1b7f4b94ce9c0cdb56ddd97 Mon Sep 17 00:00:00 2001 From: "Patrick M. Riley" Date: Mon, 6 Oct 2025 10:11:47 -0400 Subject: [PATCH 3/6] feat: update zod, change buy:product scope used --- py-langchain/backend/app/core/auth0_ai.py | 2 +- ts-langchain/bun.lock | 4 ++-- ts-langchain/package.json | 4 ++-- ts-langchain/src/lib/auth0-ai.ts | 3 +-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/py-langchain/backend/app/core/auth0_ai.py b/py-langchain/backend/app/core/auth0_ai.py index 746d274..7b786a8 100644 --- a/py-langchain/backend/app/core/auth0_ai.py +++ b/py-langchain/backend/app/core/auth0_ai.py @@ -22,7 +22,7 @@ with_async_authorization = auth0_ai.with_async_authorization( audience=settings.SHOP_API_AUDIENCE, # add any scopes you want to use with your API - scopes=["openid", "product:buy"], + scopes=["openid", "buy:product"], binding_message=lambda product, quantity: f"Do you want to buy {quantity} {product}", user_id=lambda *_, **__: ensure_config() diff --git a/ts-langchain/bun.lock b/ts-langchain/bun.lock index 55c95c2..dc6a50d 100644 --- a/ts-langchain/bun.lock +++ b/ts-langchain/bun.lock @@ -49,8 +49,8 @@ "tailwindcss-animate": "^1.0.7", "use-stick-to-bottom": "^1.0.44", "vaul": "^1.1.2", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.23.2", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.24.5", }, "devDependencies": { "@next/bundle-analyzer": "^15.1.7", diff --git a/ts-langchain/package.json b/ts-langchain/package.json index 823e873..9255535 100644 --- a/ts-langchain/package.json +++ b/ts-langchain/package.json @@ -70,8 +70,8 @@ "tailwindcss-animate": "^1.0.7", "use-stick-to-bottom": "^1.0.44", "vaul": "^1.1.2", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.23.2" + "zod": "^3.25.76", + "zod-to-json-schema": "^3.24.5" }, "devDependencies": { "@next/bundle-analyzer": "^15.1.7", diff --git a/ts-langchain/src/lib/auth0-ai.ts b/ts-langchain/src/lib/auth0-ai.ts index ea09c8c..da06f23 100644 --- a/ts-langchain/src/lib/auth0-ai.ts +++ b/ts-langchain/src/lib/auth0-ai.ts @@ -38,9 +38,8 @@ export const withAsyncAuthorization = auth0AI.withAsyncAuthorization({ return config?.configurable?._credentials?.user?.sub; }, bindingMessage: async ({ product, qty }) => `Do you want to buy ${qty} ${product}`, - scopes: ['openid', 'product:buy'], + scopes: ['openid', 'buy:product'], audience: process.env['SHOP_API_AUDIENCE']!, - /** * Note: setting a requestedExpiry to >= 301 will currently ensure email is used. Otherwise, * the default is to use push notification if available. From 96422a1ab23951ea0778a0e744716693d68c3820 Mon Sep 17 00:00:00 2001 From: "Patrick M. Riley" Date: Mon, 6 Oct 2025 10:39:03 -0400 Subject: [PATCH 4/6] fix: fixes next.js hydration warning on documents page in dev mode --- ts-langchain/src/app/documents/page.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ts-langchain/src/app/documents/page.tsx b/ts-langchain/src/app/documents/page.tsx index fe107da..700b203 100644 --- a/ts-langchain/src/app/documents/page.tsx +++ b/ts-langchain/src/app/documents/page.tsx @@ -28,12 +28,12 @@ export default async function DocumentsPage() { function getSharingStatus(sharedWith: string[] | null): ReactNode { if (!sharedWith || sharedWith.length === 0) { - return

Not shared

; + return
Not shared
; } if (sharedWith.includes(user?.email!)) { - return

Shared with you

; + return
Shared with you
; } - return

Shared with: {sharedWith.join(', ')}

; + return
Shared with: {sharedWith.join(', ')}
; } return ( @@ -64,7 +64,7 @@ export default async function DocumentsPage() {

Uploaded: {doc.createdAt ? format(doc.createdAt, 'PPP p') : 'N/A'}

-

{getSharingStatus(doc.sharedWith)}

+
{getSharingStatus(doc.sharedWith)}
Date: Mon, 6 Oct 2025 17:42:34 -0400 Subject: [PATCH 5/6] feat: update ts-vercel-ai example --- .../frontend/src/components/ui/button.tsx | 2 +- ts-langchain/bun.lock | 38 ++- ts-langchain/package.json | 2 +- ts-langchain/src/app/documents/page.tsx | 2 +- ts-langchain/src/components/ui/button.tsx | 2 +- ts-llamaindex/src/app/documents/page.tsx | 6 +- ts-llamaindex/src/components/ui/button.tsx | 2 +- ts-vercel-ai/auth0-ai-0.0.0.tgz | Bin 0 -> 69902 bytes ts-vercel-ai/auth0-ai-vercel-0.0.0.tgz | Bin 0 -> 31210 bytes ts-vercel-ai/bun.lock | 234 +++++++++++++----- ts-vercel-ai/langgraph.json | 8 - ts-vercel-ai/package.json | 20 +- ts-vercel-ai/src/app/api/chat/route.ts | 73 ++++-- ts-vercel-ai/src/app/documents/page.tsx | 6 +- .../TokenVaultAuthProps.tsx} | 2 +- .../TokenVault/TokenVaultInterruptHandler.tsx | 33 +++ .../components/auth0-ai/TokenVault/index.tsx | 28 +++ .../popup.tsx | 35 +-- .../redirect.tsx | 6 +- .../ensure-api-access.tsx | 28 --- .../auth0-ai/federated-connections/index.tsx | 28 --- .../src/components/chat-message-bubble.tsx | 149 ++++++++++- ts-vercel-ai/src/components/chat-window.tsx | 45 ++-- ts-vercel-ai/src/components/ui/button.tsx | 2 +- ts-vercel-ai/src/lib/auth0-ai.ts | 32 ++- ts-vercel-ai/src/lib/tools/context-docs.ts | 2 +- ts-vercel-ai/src/lib/tools/gmail.ts | 4 +- ts-vercel-ai/src/lib/tools/google-calender.ts | 6 +- ts-vercel-ai/src/lib/tools/serpapi.ts | 2 +- ts-vercel-ai/src/lib/tools/shop-online.ts | 6 +- ts-vercel-ai/src/lib/tools/user-info.ts | 2 +- 31 files changed, 558 insertions(+), 247 deletions(-) create mode 100644 ts-vercel-ai/auth0-ai-0.0.0.tgz create mode 100644 ts-vercel-ai/auth0-ai-vercel-0.0.0.tgz delete mode 100644 ts-vercel-ai/langgraph.json rename ts-vercel-ai/src/components/auth0-ai/{federated-connections/federated-connection-auth-props.tsx => TokenVault/TokenVaultAuthProps.tsx} (95%) create mode 100644 ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx create mode 100644 ts-vercel-ai/src/components/auth0-ai/TokenVault/index.tsx rename ts-vercel-ai/src/components/auth0-ai/{federated-connections => TokenVault}/popup.tsx (63%) rename ts-vercel-ai/src/components/auth0-ai/{federated-connections => TokenVault}/redirect.tsx (85%) delete mode 100644 ts-vercel-ai/src/components/auth0-ai/federated-connections/ensure-api-access.tsx delete mode 100644 ts-vercel-ai/src/components/auth0-ai/federated-connections/index.tsx diff --git a/py-langchain/frontend/src/components/ui/button.tsx b/py-langchain/frontend/src/components/ui/button.tsx index 9cbd46a..7c4f47f 100644 --- a/py-langchain/frontend/src/components/ui/button.tsx +++ b/py-langchain/frontend/src/components/ui/button.tsx @@ -5,7 +5,7 @@ import { cva, type VariantProps } from "class-variance-authority"; import { cn } from "@/lib/utils"; const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer", { variants: { variant: { diff --git a/ts-langchain/bun.lock b/ts-langchain/bun.lock index dc6a50d..b921319 100644 --- a/ts-langchain/bun.lock +++ b/ts-langchain/bun.lock @@ -26,7 +26,7 @@ "dotenv": "^17.0.1", "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", - "googleapis": "^148.0.0", + "googleapis": "^161.0.0", "jose": "^6.1.0", "langchain": "0.3.30", "langgraph-nextjs-api-passthrough": "^0.1.4", @@ -661,6 +661,8 @@ "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + "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=="], @@ -803,6 +805,8 @@ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], "file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="], @@ -829,6 +833,8 @@ "formdata-node": ["formdata-node@4.4.1", "", { "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" } }, "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ=="], + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -867,11 +873,11 @@ "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], - "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + "google-logging-utils": ["google-logging-utils@1.1.1", "", {}, "sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A=="], - "googleapis": ["googleapis@148.0.0", "", { "dependencies": { "google-auth-library": "^9.0.0", "googleapis-common": "^7.0.0" } }, "sha512-8PDG5VItm6E1TdZWDqtRrUJSlBcNwz0/MwCa6AL81y/RxPGXJRUwKqGZfCoVX1ZBbfr3I4NkDxBmeTyOAZSWqw=="], + "googleapis": ["googleapis@161.0.0", "", { "dependencies": { "google-auth-library": "^10.2.0", "googleapis-common": "^8.0.0" } }, "sha512-JZy2cWMxgUF8E09KHzplI+z+FVG8NWDB/bsf4xevt9Um4bInb0X1qaG9qpDn49DHT5HsU0mOp3EOBGb8+AdE3Q=="], - "googleapis-common": ["googleapis-common@7.2.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^6.0.3", "google-auth-library": "^9.7.0", "qs": "^6.7.0", "url-template": "^2.0.8", "uuid": "^9.0.0" } }, "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA=="], + "googleapis-common": ["googleapis-common@8.0.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^7.0.0-rc.4", "google-auth-library": "^10.1.0", "qs": "^6.7.0", "url-template": "^2.0.8" } }, "sha512-66if47It7y+Sab3HMkwEXx1kCq9qUC9px8ZXoj1CMrmLmUw81GpbnsNlXnlyZyGbGPGcj+tDD9XsZ23m7GLaJQ=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], @@ -1739,11 +1745,19 @@ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "fetch-blob/web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], + "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "gcp-metadata/google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "googleapis-common/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "googleapis/google-auth-library": ["google-auth-library@10.4.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-CmIrSy1bqMQUsPmA9+hcSbAXL80cFhu40cGMUjCaLpNKVzzvi+0uAHq8GNZxkoGYIsTX4ZQ7e4aInAqWxgn4fg=="], + + "googleapis-common/gaxios": ["gaxios@7.1.2", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-/Szrn8nr+2TsQT1Gp8iIe/BEytJmbyfrbFh419DfGQSkEgNEhbPi7JRJuughjkTzPWgU9gBQf5AVu3DbHt0OXA=="], + + "googleapis-common/google-auth-library": ["google-auth-library@10.4.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-CmIrSy1bqMQUsPmA9+hcSbAXL80cFhu40cGMUjCaLpNKVzzvi+0uAHq8GNZxkoGYIsTX4ZQ7e4aInAqWxgn4fg=="], "ibm-cloud-sdk-core/@types/node": ["@types/node@18.19.129", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A=="], @@ -1869,6 +1883,18 @@ "glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "googleapis-common/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "googleapis-common/google-auth-library/gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], + + "googleapis-common/google-auth-library/gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], + + "googleapis/google-auth-library/gaxios": ["gaxios@7.1.2", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-/Szrn8nr+2TsQT1Gp8iIe/BEytJmbyfrbFh419DfGQSkEgNEhbPi7JRJuughjkTzPWgU9gBQf5AVu3DbHt0OXA=="], + + "googleapis/google-auth-library/gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], + + "googleapis/google-auth-library/gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], + "ibm-cloud-sdk-core/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "jsonwebtoken/jws/jwa": ["jwa@1.4.2", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw=="], @@ -1903,6 +1929,8 @@ "cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "googleapis/google-auth-library/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + "npm-run-all/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], diff --git a/ts-langchain/package.json b/ts-langchain/package.json index 9255535..8cdfb01 100644 --- a/ts-langchain/package.json +++ b/ts-langchain/package.json @@ -47,7 +47,7 @@ "dotenv": "^17.0.1", "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", - "googleapis": "^148.0.0", + "googleapis": "^161.0.0", "jose": "^6.1.0", "langchain": "0.3.30", "langgraph-nextjs-api-passthrough": "^0.1.4", diff --git a/ts-langchain/src/app/documents/page.tsx b/ts-langchain/src/app/documents/page.tsx index 700b203..1cf1990 100644 --- a/ts-langchain/src/app/documents/page.tsx +++ b/ts-langchain/src/app/documents/page.tsx @@ -64,7 +64,7 @@ export default async function DocumentsPage() {

Uploaded: {doc.createdAt ? format(doc.createdAt, 'PPP p') : 'N/A'}

-
{getSharingStatus(doc.sharedWith)}
+

{getSharingStatus(doc.sharedWith)}

Not shared

; + return
Not shared
; } if (sharedWith.includes(user?.email!)) { - return

Shared with you

; + return
Shared with you
; } - return

Shared with: {sharedWith.join(', ')}

; + return
Shared with: {sharedWith.join(', ')}
; } return ( diff --git a/ts-llamaindex/src/components/ui/button.tsx b/ts-llamaindex/src/components/ui/button.tsx index dfdf351..b991a69 100644 --- a/ts-llamaindex/src/components/ui/button.tsx +++ b/ts-llamaindex/src/components/ui/button.tsx @@ -5,7 +5,7 @@ import { cva, type VariantProps } from 'class-variance-authority'; import { cn } from '@/utils/cn'; const buttonVariants = cva( - 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer', { variants: { variant: { diff --git a/ts-vercel-ai/auth0-ai-0.0.0.tgz b/ts-vercel-ai/auth0-ai-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7198fb3c1d1cfb5a22975325dab1195044533225 GIT binary patch literal 69902 zcmZU)Q*b418}A+4ww+9DW0Fj4YcjEI+jg>IPi)&-;l#E%G1i{v{l2Pwu=}8^Pr9n> zuIj7)_+6wiaA5ztFfV)jJT|x+d3`~^a?!_)a;@_;t5-j*-tAf@#wd48ftK8-r?L(d z1#ujk=p~F)VxC8j03Z?=2AG(PyXlDHxXZdWl_5;Xz)x0=O#H6xQXerbqsOkEp_J_a z!Qn;gmR24f_>T?img#^Mo@L!{3+t=v_BAzj4sG1mtU&W7Pb9l3%rS|uvHM7@K zM4OmiVp9vZ&u9zJ1y&yBDZ z1tzyS5k8^oo4zof*}NLQP@*|8G-xX{>1nUrmt^Rw~MKDJo*s9Q=}|sD!X>VMP4P+9LKfuml0TAJ-qITn{Y1J#3KsL080EYx*n88w z0NMPsa1w{^^x{ZKEww*{++Legpi8-eMs`-DArJ$`0kVQ$Ge(xzHgwC77 z70+%*4{@%gBK5_L&WGH`h{v(5u0%!FV+}tUDRu&zqLJz!zGb%jj)@y>2|2@;f-9{B zAm^|QtD8lCgv==6Iq+@o8=f#To;MnspdO4CgsEVleI!eUL<F&GVKh z+X05Pf+}E+_z&3PK6WYj%8h-u5{pF&WE_vm2C%6E;WRlch}PQ@3}Oj4_DnL!^1G1A z7zdAzB~V3=WCZtp;rIvXA+q~OV76KHE|*Xjc!Q1rb5&rpsHa@fY7GQ%$XgG*Nqzg@ z6{|bV>*-hP=!#XM@jNCTSy7T+WB^dOVu#`BI?T>Gzz~@AdwUE_I|v)mj$gg?P7SD3 zu7@zckQW+q$jrcm9lnMDrxm0e{A9cNnRGtECV{pq+DXR532(RV+ zV+Z5N62R!SLtm_tV7?z6;8yU)QgcxACOqRgh{53bTAS@<&H)+SovkJ=u97m`0NP{l*k!MBTeNR;GUKv_%D3CdFhxjd27kjb)wSX2D2Z#`MGu05;fI1v*;CIOU(Vd8(^pJ53U6s z$>xyPS6D)B^RV+%Nn|9s$WkUNCs0HP_sx4J#l+1AC|Rb4&z0iR9%MRnkrgmZO?y4r zZjm2C!+oDK;~{KKjT)Z_bw~|nuNjN8<*VFG@7zwLizM%-0y?z+4eNTZy9;e6%Zjt& zcal)FU2(#ATLJ%ps6te;tKYPX5K!wW!P60FqTqWFel{~nR@f{POjW4W0E@J~nl@61 z#GgV-z79ohkHo3BYmzLJKzm}m8^$A=dN9{xb?h+8xwk?RSAR#WVkJV<#Ac7cs2`UvE^-Z0OjoXx4r;>P%F7h1> z8c?$n#0&Jr!IT=Rr~e|29d$~+pBUHdM6(U!jIa$&fDZ?rNIsp$kC78W9ME;|wL=4` z`tQYg@Yqzi3721y9mGehM$swHRYo_d`nh<21fPoM@mcnJu)A5U=!CQz6R9-xdEK1~ zMzX&WGG<}FD8FQ>UFKLZg>n$H&JS?O2X1x{Es*xd#xxVfu1LyAx+! z3bJ_LCN;Z##qAFR4~b%xJLMx%V^sLJoPwlD&_<#Y$AWynMIp;ieg_;3iHG7JH1Dy~ zTff?8C+UVS2JXGic;pFfxWe(3{ZWl`kraR$~)fBs~* zcJ2g^qWTfhu&VPY!L$=8*RIYXQcXrdMIJ|Y)Wjb-#M*n@)qE&-WwF1sxJwDBPt^x2 z0mBo)q*_881&0nViT=I6q=^TJ+1yTj^l)N4^vh-Rb8?emz8{2#Rh-vPO9pG8x}%E> zqj=%l(KAA$|YGdK$}?QNs&LX+b9wky3Gy$Hc=Ti>oW3(xA3> z5oNIcfMLzG)f{O+ENgK0bX~uBvZg8}RU4*fBA@4m8xS8#tHUru*R$*m6ak=0vPeY9 zVVu8t)=ou5>L$S=jX)DyjXH-!)>)x&Lu>+Ief0b5f6YY;Q4#Y{le^&)8C&|dYOJjC zhMJh`1s}_{JKG*--cpBTFW=No+H)oEF{)_oCjLx(fLtAAzW1wKbp~*12zIIhRsTwe zqqO}rNmSvp-`C>Y!%RX688!+c-!k<~5G}?I=c(^d<8c~4OU!o)?5l`WH%I4j@MoRD z`ek211S=+-NEV45w0S7CsA|Eq`RMl|5R?)stEXxc9*7`6EitALZ-n#0xxp#+6%ucG zs3fJzx{8-VikmiAbd&^9Ctsy_FjI_%E^Cl#*g7Uw8K&zbu2m^ zbHeikCn9PP8X+Td1?MRXEvxXx;!>)#mX-z1>gW)3h zS*eArM>rv9unR!ne?4T9+WzD-+y#fn6AB)oG0A2t!0+C@^5bc zK}UN>*no4ZE+L}IVlp<)%<-M-@1R2a<8bPM7;NtqnlnS2AB?R+lENn*pV8!q_Q*Z> zDb6tkGp8fYVZ3N@stkGodeH>7Wz)zkFL|(`m$6I%#=5*Snsj&Qmk$OUA-rt^Q@mr! zhzy{flO!k(n+%>pdB{`7k(ox+k#kN5hcnIj&v*xh@8;lOuEnf-e>4HBU|=A)v#7rl zX8)Li)HQzQ3D3uE#EAxP#dui!L-<&rzQocrtxUCjdWa4z?_OpN>CIAO0dTRb30#+y zhoS`tf0n;A?tfAeFsSk-2l{(7zoB+7ckPu z&hpU!i@dmnKIDkkH=o!i#>41fh&WJ%<0Vn{%oeKIqX~AOUU?eFYY3$~~l4l3J*ZW|2L%Sld z-r^KxhE}}EMQ|$Gv!{hNFPAta|CYXtGz=YpjuTwBG{@N}D_g)?Ps&O)I3X0WY#Q1n z3i}3i2?4wj*JA0C8*m2B_1YN016Zu}Am~_LIK#l*8Gv)VS=Zw|b1f^%TG>r5L)?UF z^(YpaOZ~87DU5Sse|I|-Sb3vps868nQZGsi>J{3zaNSKBPJ%xd1?ebIXz@|AZh6G0 zXq5LdU-7$y|I{*)2ZKkj(ay&3KGlV=u9O>Kq>mmnAZBx{uF!(r_ahI=40_=55Xl$m z^A3Eg*=++`cOX;8M(tLcBv2^fN6S#a#%@idPc{HChz{+DwiB}AL=MQMbX#tEJzYAW zkQ1Z62*w&ZtDm-{IJ6_Yg4m&gbd6Fw@oj(e$;ifUv&MHQqHzU8ci^=o3{yi!e-z2+ zhXUgSCkIGfN(**vd48C=Vg(U~rsnanOTcqQ%}NxOiglP^uOj^Ty;+aOy6HN6M)Nb; zIE4Su%omv!!{2fWElgWIdqz4u4_77A3dHfMoe8d-MQ;chGmTF*7@aI@&z0!QzfwlG z$jn*n=nW48xEU-uwjpq0N8`Oa3zQOO5s8)9DdKfcL3bvgN3d8;k#kR`>friesbnx} z2{HAZ4l76U>g+WR4ewCd{^ubd4M)SfZlRFm>eQ}dp3ns`Nk5F$!|2<>m(8CCuUYMv z00<+UM}LbdODiRsgVY-LRfR*h&`;bIJtKcte~X7_wk?oLO-pM};d?-Box_c-`d9vx zr*%F3Q2Ksp%a(;cNI@jOzC_E^^y)D*soFr+7E8810;-^HuLHz!nvw4R}qLudgJ1@+@jONF;;t4VN zHDf@pYu#xMJR!-bRc&6q`(6<8d7xBK&kVgy*kw``@2!l@GrqMC9F~n){_OI2UMj~0 zmxTsM*XB}K?{hE0;t;m+Cit4db;LYK2%|rpG63n`;DzMX%>N%?+x)@ zW;H}b@2J#Cl{82pKE^=UE)rtXT)6D`#Nfj_CkIRrzu6Sa3nT6;HwgQ6k+Fxs~5Cgu?q$% zyT&5MU%k@#`3cminYUbJ<#x>?yN2X(E2pp{xL}qK zNv%^H`4D_+DzliZo<O->#LxcT8v=Yn7oW2^Uw64HHNs81#HldGKSuS#gUxq;M90rB^l|K6mmLn# zJy{9d97xckV^K980ejazx5|jW67a%KV4Y*%X{K`H>Ne5p2k7V==4$zKF%St~9hH!r?x?Q?~;nGFd5)XIq zj)46f!p)cT$B-#VH#u4|&4a{|P`H)O-gJebS2!+Xf=umFPQN#BkC8k~kd_U=uMYU~ z5=myt+b{Fyky!}8V^0?Je*7KqvS01t>+AZ#8fqodFU;%H_?US;`sgQs7)=#N2pZgG@#Wye>tow-dV{@ z=%ZAE5_n1B6Z}O`US5$D?RlN1(L+n6=45%zLcL&j_)$ZpRGG3wDY+K`LGoDT`W)N^ zy$vse#>jqNFh~jKhTOP{naom>k|{=2^s@hmAqf8jwCruO#S3z9(EJja^1?X>ahxzr z!5?pEnge~Wnxbx$BDoM z-Q?x58i7U4#xzYEL3X~Wa4LM!=02EFS-J9>dg;WYDRYnFvYH?G`<^d?gQtD<_o2}P zfn%RLlon(S*L@wAnYNR7P3bExw2foU-{P~~%j)Q7FEOMaI&|R<58~soh9h}|c_mK! zhRTahoywv?d?l_(se-?d8=pNe=56j__ET7O>u6I)_OM4#W6R11B1coyd+n3aLu4j? z0Hkb_=Ze|l-oB!66RdIvKv`l>AElHB&Pz6TnNmSUkb@^XKXSTL9CC)8h`!!F?d>1Y ze7T{a!IvK;$HGlFrm5`Z$*E80T zpH4a;JHNksft@h)B4$5PhT|f?!#>J?c&d?c4Aduk>X$%LWw(k)y-h!Ww?)l&rlCNM z;X!m+a=9^IN9O)kk!DSWN2@Zl$7&>-j>=icU?yC)sY7kGMz&xNXVrA$w&nGA6w}eI zLp~eJ4#zY#gNkczVx#zLvUJmL?zdaE6t#ch9a6ndME5;;GjmFsv;Qpq5*=5gf{%cB z7biG|7oQ3`)4fF#n)z?-F8qi4GJdOj`dmOhw11PbD!!WDrwUV65@4a((*x)G$i1pw z6;?*w-$4YK&0{gAdX7M}kVO?9s+&$oARBe zH9^&Ay4Vf`hh05F7z%@EhpQa80nX^jA8>serp14(d98edfrM_5vXPcV-*GL(5w~d` zn_PC8eH;E9}+lFP5N&hhp!6flNV~M`>7A z!}xhfo#9AI(lX+beT2K~gAE_@02SOemtb-p6e^vlml%*oL>vtRsD}Q@tQiSbzJ_AM zp6Ppc2FLrrVJq%{a`O#uQ~TX=^=0>*fv>FiCHlDMfie?=SV`yIiG(5dkT8^YUo4D7 zU%$MX*-+(YrV4yM0aIQILihf*}k_YQvXTVaURb^q0 znBzPjE~eP5iJI}d)uM`f?bg11VcXNQP>pqK-Ino2<``R%p+N3bVac-kKvrk*rb4vx zmlUF553iskr=`sgHpwtO$lAdP9XO|TopqT5IfC4|zg`##ihDQm-|MEtR;dX}v#bV# zG&skhLWEQowTf?vI%0fT|5%7UmC8arD4Bz6y_5Y>aXQ+Pe+du(GkY&J&dp@z$PKNPl8uXJ9OKUPKUoH!^t_a!Xa zT~LSO*Y6=wCQ$kC4hT>#f1^Ig_nJPahFg5WAPfHrK`V!82;vtJBwg$FZTBA(l|(0o zGs>(SnjUjbZ){5eb%s^!lT$z5s6)p{CjGSK>W0n_=Pb?jWxp6{(iTf2cNN2d{;lQ- z`*$eqJAypx)s8U-&Ex~uPRJ3`pk)7eWZBRvtu3CCIB7AUGxG&ea)?R&TjY-741=L_ zzlfD?!w{yk+|!FC!l^3I5gOYN@|jIA^5d13Xys`sB=V(L0jM8g(pLMte)!(vTgYhb z4C1^)eWi99+mum&DotJOUsB2yMj?!cm*BaVknJ~+!5t$i9tqebhtWY6sZPXRm{4G* z7*V_?qFuURN5Ov@GgcwUsF5YpVlAjs)f~*#O7s&QxPaORd#5(*aM|LGQadkwB)TnQ za@ZRHxL%Gy8z=N?#A?!w0Ft8ApVqZ`Mnb^as2GMEltTsT4Kx2Ass-uye2Zk_p>6U8)C)yvZhr3jzH9<6$M}0QO4YI;? zke1x!0=tdX;UKH9C^5ft$JvvurP--bpZJ5^hT;q)9l}og$sA##V1h>B65b(o{~yR4 zHrh#n#chPaWsnN&V(mbUE|Rx6=*q( zJakb^ACjjs@ z-veYq{a~QX&d|O=vn;ZTRlb|jgt7E)#!JImu`Nw@ zz2ihcoV6`2D9ccllRL4+{!><7tDEOz#aN2y6Nn*Kaav^HWjT90$DEMW3?^+?74nqg zJnbL+wVFowM7&l1Ky22z;dW$OBb?UM0_YoJ7Iys@ey7@TO2auL)xg3o%`Mfg_XW{O3>31-S6m&Ts zW$Sm)1aQ?(q!HdPI!P?sQYS3mXh+=JxO3J5q8ZEgCo9{X8CnI?)SQmgyMIDd0;2o) z%l9Q;(Y0!amhUubhnluEYlqTuZoBOVW1e3%@@L~fOx0y-LV*^e0Xu9DBKCGywwhmk zQ=aJnkQjL;gZGDtr|=3W0R5t`rAbF0wDIT7Xw;?r1NG1O=XsvM4M=j$&Ya;C|02N7 zZ)+OV+_Cuk2~;YGxCJ_j`d1@}VzxCZ!bEBDQeO5mqpF1mkJcoe%_j$YW*v%4F;P+2J6+x zWpE*W857rWCx%IZfuZ+Zc(G-sXtbMp&dF40VFNM6k=}!n7&d)oslJ)vN2v8Po5PqG z(tC03e$YI6^@2Att!aEp{`}Y(V)pY1s!#D@d+R;pcr+dpR%%+Cl%;1UhVLa6-M2le zL0)epS&(GNN3S_WHAH<18ye+>_UjfhLacTymb#e>e00(-X+07KX8YyeuJ(sNot-#{Z5 zAl;1|$!n|oPYGCTEssZ@rp1GY$JJj z>;CL|=ZG)&H|56P`BVh%Y)8E!lDH!_o?8IC%4c5o<2z7Y8vWFLG#;70{+ThCyq@SF zGLDm@*Jq!HtQOEsGk5GKsc&%AX8`_e$SKHeP^GzdtxLkA6%Q3iy;LYjR)qrjnW-A7JQ7y;%XB#@mg5BfS!>NyzG>E+Xg-p1D4L4n zkghKS2_&BY?L;9p4q0P{*NCiHm0?#Y$Pl8MOyvqtmMTsqjrkrMQEepzAweMVr;~a; z*neio39vRW`}0(GwMouduCq&zOjS)q(#&|Pu_7@xl|B>(7%`8^K zIp-Eh_*u2{w>8PB>IH>Qp|z!a`ZvHGOTbHrEbNdn?wuANAsVsXPtyg z{(d^@$%1Ak3^G!B^22q4CQSLixd*(?)p#qxsATUcL#0qQQ+hpWAtN~Tu|3E-JJkn< zb9CR%p8Q6=r=ld@4V~;^7gdN@R-9)ObM*K zO^Q;Rc(F&7L2M@XOzF-fH%*+FM$Y1i5cDeu@fNiFCY1!zddn{r%>FQPI;hJg)Vgf; zo<51cGny74q_{o(D_r&fdYrlX_V5Kd1_Cwz8?>kQB8`t6*INOiunPnDwpRVs^JV6~ z4uPNFre4%YM|7MOtk8-6|HLDolx%|E*D^(^rZez1$S`E80s!x2^(4< z+i)j|Y#{D16lypBELy;^@uaIzG8m|NP~<2G)>G=@ztF?m>&qBg_^=ck$1X;#z!!LN z>vR$XD2L_M=8CB*7_I-*`TfA+H6cR~+Uk63h>x_wh>h@H(vgTA{kgx8V`7#|57A7#5H%pT?n_3$7LR@aU#sp4-DvOqKXk0 zwR6OdN$@^G0~< z7EAWHrr6(!Z>v9A5klnXa$@O>mx#ks8*amg6K!=_@K}Q@zg4mrM0lfjB9bHYPe=?J z8=4s}G|=smj#6E^*z%k;j$dRLt^hOZLI8d6991##JAD=|nzDE7mR%IL6h2kP6LL;!r9K zZxam^cV?d?I5fe7*+$FABa9?e*W#SOu+CFRE{KBUg-nQ|QIr6nSczj0EHLuO4t$P4 zN8r+i=uipnW{Td_axXZaKsYRsO;P3%COHv>f4l*q`-rK_wG}>T2qez{|6`0O2}g_Xk>YJO#asF(%qlMrch4@NrYGn z__(#U#6Q`{;2YXMlL2Ao@4ohLVVtWY)h@mm@30T<6pNFyX^H48bu;sg7`lClLDiWX z)w%d`t~=~w=yviGIl_$Oxo4P`G-~K=ct?3>0D0gmvJf_lf(hI%JG>M#x4Y0f%}pw& zqxX8-^IIUZrMLInZ-u22ruKsh>CQ`5Ie#XvS+$sT)T*}QK*Y*C9Fbo_jP(th4ohIPnD;7cc*o%2K%Kt-Ca}<4T9@QYa}cTW9Z=9KcS;)LA+&R+u;+ z9%wzH4sjAU{UhUygt1pguOg&UR&l!4TE_4BYA(Q<;!4#|lG-ge&xu@J>{SpKmKP>v zR7Gnhh|cppZU})lPH2TVlKBB1`>>q%B@q>tI=wBJwSp1N*_ufS4~P31Qn{2Bm5Nqr z#*Y)G+Cq9c1g4i0W(J=CPJo?{Fp%%TPM6KAjR?T;U_$^M4-``klUFg_4R1}gp=Ks zU{_iI(k3;zTvO#zd$zkQ%+yhz9G^3+p_<%aC|x~MRdtjV$d0{^FFG;P)Rg5Cidg2! zLw=hShW~xzg()ih(|)FCe@#cdb0$kc3!k?N3Gi$P9>_B_$sjRfP=3Nz`T=NtR8(=S zuFWGMCb}!;skqv;9Hud;PgTkP&M6vq_lle+nD7Q`Pzi++^6(EnObvhOqkzNI%DZoj zFD%KVB449adnB%6`#2mp7smR-HcBI0P{~uRlsu=df2(Gjv$Rc=3n1tmB6su4u5S&) zv8FqaK11N`URp1q!CJs$dOnzZe0-cFQYBps=i3mB7@NanT@jU8`O%C2Z5il;3gzm4vJ4 zJ9)mI`UwmqUDxc9hm{lKnL7jlUQ@kf0+&&zQKzDqAhC3toFMTqx%=@Ou7MoKdZzSR zz&}_XTecU_1s1Yz?oyTgz`>Wd>4dr|k0gP9o6B8Pa273a#G88PekM=<1fKVT0>nC= ze5nDfGgto8)nV|~dTnimBb~w-zSLiwGKw9l)7sJ%#2f^y0w1@V$YirF1Sxnt4#qUL zDSf^e$UFY^1eu{jV(dPj=_Ac6`ka$nxrDotI&<>4Pw)3V>)z^sMl(WduEvZUfqQX( zTix?&{z_=TVH{t+_c2;C2+bm9R!~bG7k-|tgxQ@bJ20n`jAqH&pkt4SCb30RLc8Kv z*GDbXg0k4tOW?Im?-m!XvXB^%VT&A7={Pa?;;I!li~fH$^kgE6u2`ur4jX*`%2C^fz=nt1l4~1_PaUd z;ZJq-`P1)IroM!tF?=ndpK0fsI&Cs#(MZP@CKo)y8RK6w3%sY2(t6N_X96ZmIR34& zVykbl;-{unSo3xFjAo_zHPN(PP1(9JU0V!p(cqg+3pn|DrN5%u!h+dzHtdev^t`q- z4cm;uR%&oMoC<+$X^U5Fm#*(KFYB7jt@%g4a-teg&lLnD#r>`0o2W7Lj!521woDkc zw25n9^^HlZHmck=-vvdqdMYOyTAXdac`=MF|KBGcFi-`t9`4bIZb!B5m{vzM&|9yg zT9dgdZR+>EI&+oMoY|wwd%3W;#Zvjcmu^RvFeAjRmwj0&5G_rqa(&mpPZoDiRM#s; zSkXb{Hbn;zVR_xAevC5dSJoQ}Iw^j71QY@M8GyM)n@SIbd9$&g$)gW^k^+wXfVO3K zdC+W4T-+qcg??82L1el`mOa@^_2SURPk0gJL;jz|*3btD{AaN#yYGb4!XoN4Z&p4x zeLy0>+1jSJ%q)=A)HJBKqeG|WpUFl|22~E5#9pSoCWAka&vMk&WX5i?iMVTjoS0Ip zuaw_4Q_Qj})w9#K^4|7rPFHm{TD>BRR8E@DSaqGw*O(&F`wE2+9XNVgVR-dQ6RJZj z+bWO#zP&w=Chw80-L$t+HiHJ^|N2)QtsK*#^(X|pJAvt_P@_kGLyVqR)rzfN{Uv<* zVaWiq1Dr1ad^XC=EtG-9-@DQ@wK9f@Xy|FYx;VT#1bqa|OoKZAee~Av7Z7_M?0%Pc zb@i&lh(F`gduD#{hsaUwx!(gga2K?Zc&Tv$s+oC|1-1Rt`G+9?&BiZVGYo{D1-B(2rt96fH`wyQ3){k6%FPo4{nX z|BN1gOq4o34}Tt+zY8&|b$E?)B>z^?Y-41Y9IS9!rfmDmNs6^%c|D_ejy-96I$F!1 z2;P(7e3Cch@$>HET&yALg`1#Hid|4o5A&!(Oe@*y>qxY5wNp#E)8nQ?rr zh>7O0$;|`Sh95Ui#W_~5ke`?9CTIs}1vE1L8J=12kk^i=pY0Rizs`g&y;W;Pb zd#9tue|(RGFDkozkI!D32Yq?#k;euZE;*yEQjp_xV$7|6#Nqz;Tmy7FqVvy&pT7J9 zn&L-&?FzepE2bNS`YoiW)1>L`+z2=Ia?=(EyttfbfOaoOoK9|=x&MS$K7R#{wk=E+Z zP_xAeM?WhM?ra2%{QaZ{?q9vLX$QwVQged$UKL#vE^Kcr6b%XNZ=At=^m+YMVatO* zQEwKv^p@I$ISxT_k6c3_4?9dlje8JA9&7_>4M#n}h~`_{+CZzo&=XJo#O&qS|BH4U zQw$&^(hp{Qq~n7jVo;FTop)H1pDlaWk*uc7V6??A#`c@x81&uSFw6jw-zS?X5RqgY z1HKI$R^MDb6gkh9%EvG4>2s7cJuf&=Qz+8ds}t<8+++Rio5}z!>)BjLzB)7|gVOI( zttUx>^d<6|yV><@o?Z@P=(CGinDJBh9-J;8)i}iye*M$tJLe5TYBvEW%=#}%hmM_X z@~m>8rlts6`;Ye5gWHo!C61c8Z({68hfhWd7HTPRvIUG7mg7(g&7- zApR~Xb=zX$#DJdpaMG+sLk4YxYlmY53r(OBgY>swE^3y^L zDs;+=zn`$+hRw)xxMae7Lj2dckEqT+Qpc6dIc4$tRfqd@1xvg;)A@>-oGTDqLbN5l zRVY$=jwgsc%O`z=$gpQ$jAKU5;vtcamo03?F^7j=li8dM!=qdxhOSOUb2{3oL+RV4i-LsHFTgFt^1vS zV|gAV6fo}q8(XUDyX1B6Zu zzWK-_ys4lxB$YXfJXyw3qIX6jE675 z^)lk|*D(ZBGqyCj5(}m@JEP!Izm~0h&rdW{`n{+OC@|Obn|D%p;tqINWapUUOl;nu zj{~}YomSyQT=FX?PTWqSv2QL{ejH}9`;a49H;;C?zC&hQ;0Z4-WN0vjOM+4@L`Hkk z_k^D>b3~kXH~)4V!m*mteI$4gR>#E(($dLz1fa5lKPpaYJ>VV7BnYU6V=%8}8U1!1 zbmUC<`tG27qfNr=V?NG*S%M#UNHk9W1r?AQMEXDl1iajWFZRYbszS;D@cAXD-FXc^ z!0_$ZV_Rjm5`^S$=tb_~lI|U&X47!p!8ZXv`Z0lImyrqU!23HzL5X5Ak}wP^Es z3-MV#dRDGV7yGj!rOuoIuQY{_*?})d-AK&gXgG}T=A3{a>8Bq(f0lRyNAl+Ah#0Q2 zBKG8W%i3jknX*ij%pK4WNpcrL7zxDgwZ+^WUnxdYDeNoq#pN2&Bs3Wt#lMms7i5?- zOJk#LgbbYI|JzjIDP50F!*$hms>$YyY4CG1)ErMDf}Ay}_9wEy4E<(;!DMHbGn0dn zv)ozBvWu}o<#aS>Dr`FOZ&qZ6{z5rIk=O8)cuD?imqN2qCVWgS+CL`ai~Z6sdxUgO zpD`lD(=f*-ecLQqXi3HnCTpFRNK!XsyO98M)0c#X)`!KwSqdi0u`d(h8k#{zgDbJ` zjI=;S2`FQNr4m5f5+_Zs9pl7@jt#nzg~v}gT7qcF><7OY+T?*(NC`Al!59%XYtM(@1aUNet85yH~b7HB{*+q)2ABgkC#!nOt1EMPF$ui}vCWj#{6o z?pw^9;>UYrsXC)t%J*zG^bkUw(!J-8*%WMNewN>k$_e{s#+44j?NPxjjn;DeFkf;O znq@O~!&4{>F<;JBv2sfT=);)oD|tHC+tv*1oA0th_-Lrvswhz5b|6|I-}(0Eov_Ll zGfRK`lbh8>da8uQ-52kV7`$dyY^4YAgt|!u<$xr<4k4uppjmD}>$yzEIuc@Cp~yI=kP)vwg*S+{dKEZ7fd}3F%kg|yM3)`uxsl?3T1j( zp1&{;D`p@2Ur-Gr?a^@XTeO7D93Tcf-igaiM6KJpgKak$rIvS=acFO!@Sy=eM}z^t zW$`M-m}Tx>@*;{@ireMRPVo1ehvp2gBuA#fV)gGH7gNVqS#!mGQ6V2GW`^WD!H2m> zcGLMGv@^Z|eKxJw5WL<9aXcV=2JQp89(3f6G^R_}clmG^jBWU^tnw0kR!yHP8CPQf2P+I4Kc9H<>M~ zrFLfBOKcE#jQN$R!JS`Moi(&=RB6ueN4_+>Qk^5sx=eLO{dblums+Jc6P8}3If*LQ z1DzX7!XEt#sNkJW4_WHK@$nUYw(T=(0L=U}ptW^5?t{fcP|oVJ1PS57Un%gzO)@xF*fieb|_8SAE$Ax`Zdi4bSWS73A)Z4 zy@lus)qk8>`jP}JeFBE3HpyiJqfOWhik2L-AzM&Jj3)_CbrRw~RF~wCf)gPM6!sS% zJTbifa#8x2*8E|(&b;RHIVh8uzJ?F+7=JGW^f{e7LDPzmu5i4KP?jjTvg5%;?RE z{hBBxKY=YuBb~6}A?Bxirt~B^y3raB%2B0_uDghXu}YB{?np8cWFM$R%GuhOiUGF> z%?P0VM##Fx6qFf8iFF{iIOoi;sHFc|_rZdiw&j*hW$pn+qJTjXdM^+u@{f!Erw^7V z6R{$e22Rl)QD?Wv4!xlZ@X;<4>s~%EMzjjGoO8!QRgCM#Amq(;pvy~~ zec0r`^Qfrh#n1?miuFUWzI5aYu z84pt_We_%*bvxt1qKf=ziYXDt@1uz%ikws}*R?T~0L3Kz=pfhKU7bK)76*J6X2Iw_ z+1Qs?zO#v33dASSKatPf)~Yx1V1x}aqfcNxM9pMfuPV=;o=zyD1I3r)j(o9X1#!Mj zrN}kF8Oe6I1iIU<{ZS}8ipYrIZB&O%tGg;-|M_PiROHV<34f+KY>F9?Jj`W|K;*R7 z2VVVa0%5+J|J+t>84)GP>E*dQGG0!4<4%!D4yv=W&wd3h^XO@O z{HsAwQ$UcXG_yKkSr9Ie)6fbn5I?kJV{uC9Fm|g}T_m(6uAwz-xqenL`106MhC%cj zTf{YL!^6lGPejsOd(la4Lgl#WvH5W&wm3;=Qs|E~Tqf%cuQNHC@7a*g&76OSK-6xN zuZ!}KOY&lMsB&MK*C}jDDj`ZvvytO|#`Aij$glj^8T(LUe64zS1o_GNMtKvlo`WRH;RL~fsDb<#4((5l)l4a&w z`q3(Xm!75rmO4FJbu`?F4oWn_@R+_y9Jdh=q@k(U*o<_2ql!B~OBMbPIO>k9pl$u; zM3gaecR{@xxh*mOOo(7e`w?Hz!{jkYLhB^k)66`n4e;rBtGwn#**whh>X1;G&1x## zeodTNYyQkH>EkuzY~c4Xao8kXbG@S}%X!W%BE?sMLVkH6MnwTA97PdW<>_t52l09n znz4AHjc0E%*Zg)fqd2x|fT}C`i5wUaz9!3b*67Z#*aaK=-6>lEX~lGKODiuIA9i=? zxJ`^M7jB^`(BGzK&}jE(n1@lwDXSaEsDB$o+Vl)sUSDpt0`06;UjI84ozpMS-;5!i z=YM53{r3#R4v2_`**)l{L(oi1IzGt6r+DGNvqO6Y9bSEj_-v`6n|=IU;pxGY90_5Y z3VV6jXNC98NNF= z;=ljH%)DepWmIKFJygcd+-vP}H~O0o79(s9-7l4r;ljs-^dM`rW$_2tuxzyUM(xx|?t=N5{&TaHNiTq8_e7)nc#X938FVq3pfp4j>lpdc_+ zZ>gKg4tkIs#iWS4Xa*q)1!s+IxdQ~;Zcm#IT~J-RP%}$<`AJf4fEV7k1InANA$Uud zMC9Gm6oWtgTg3*iO1)9wE5??=D+`WVgWbQq=;0qou|=wN zViS5W1TH(|;Ok^Hy66cY%5e2M8LW06Ho+g;5+_V0 z6e!Qj^hWU3C6r18O_0WI*h=rrF3l4t$F0wq z*mEA7he9+#iS!qU-7SAYbi1ay4{#fsY7~U}`PFVPZHiE6NUJLm2yU@VMd%l={!u
yqEfhIo+T#pQrcKhhY;Ib^@rdkzBq8Vr6%?%RtnSJ!zvXOdos+2X^=&oDsd5Y^%$z6u@mAw|Bq}e?MS7z{2 z|IMMGf>d=IRZ%}c+dBj`h@WcBL6l3%?mzt58B>hTm!kg(f$|p z@aoTpurQEHbjND^{kDrR541Cs4fgG+Hm;C>JPs0kr-W1qp3hm5r6Eu&!}@|`Cd~po zc%b~kT}0bmI{+8>me#(w1n{4X1kG#hYSN8>)@oNktb}N+r^@r%=xtBufj{pJ{KU*x z=?izMv_)Y`Dj7}&+nOQz{;_>QJybvuYhUvo98f{y*Yq}yb^e$DC5!L>$N5dWNchOL zW)(;WQ(tUu2Hd6i+E}#6c++=VS@}Y7XlC#4L76;?MBA#L-sY?|j3c)J+PcXD)E5P6N|BH{Z%ZBeloe231vy=RF%?|X4}H`iutNsE<@dZ& z5M9swbW5`opYd^b0*7TR2RtL%JblrIuU)odOzYl-wn%E!! z3ZvoIKKwv3{`uqOw3#ADr-!Jrt;N$6SnMrPH_f(sC5D)hlXwrKtIwMGJ&JfuI3`Tw2=D zpxG;0(4`WgWvcHKVM|;^LFus3YFdTPE3$)2w3N$x&{x1;aff%^^ZcDWNO@};U zg{gR~dS3GYmjATN@rSM~!M1|(4D9>_TvsmFayP=+=fd>nqL^85%JOCFpyCX`Ca7JO$!0XX}xBZ)3vFEwvV*7ru-qzKTrp$ zujM^xrt}=tv0S+Va>|8W2YsJ7xQ*&fEG~uvuM$L^7$BBX2Lu=%wfF~Y5}=&64hYtW z-yzHbyGi3o=@j5zY%x$ER$K>fx5VNH-^Y4*%4WqRT@)~KJvLwmkL9HBurw|YbQhoq zlNaJE4xZrR{5)SY=fj4bmHZ$Tku;|Mo6^MW7jVbo+`TmK{f^Yo@TkA)#(S&%81q%p>#a|;!o2RJYfgz z?oQHKr2hBs6LrL;22}MxjzD_^+oSv}0=ghhezLEW#)Y233YO{$fdk>`@SLj-NALl7 zUSo<5iY2+7bUXIk@4vrKl7)PKU2FsW%4lSA{tNNQe{v1)s`8%rR7r1GL)=Q~swo=` z=@bYS)WwiM_iI6ua&~Sgu{E5dv}m=vO{^C9omy9L3sl1aq_dx;XJ82en0+rLTTgGE)5BGuyfKb&b>Z+(a3H$O zKqdS%P#QJ$PeIC0MR0|LzUO}PjD8exW776hSob@EuuXP9*!1QY7wWaUgJ6AJkwkwPfyV*T z?OSaXkiCs>#G0Ty{xn|u{lL?JRns_ek_sI_pZMm4dtMRgyRPg7)Gh?HDK3Go|Eauy z((ZluoifaR)ebdD@m2kIQzypvVMS5T^da*EQq8Fq5JAm$1vwX;f!bP@E04Z}yRRMm z#q1{xSObh{Gmm?cPs}40%1k2wxA;=*r~aeavp^Q6gI|1bxt?|n$C!WOhE*&8dr2Yd z2z>S=9S4%2&i@b>-$3sp zGie1N-Q6v%s-v%*XDi?aFd*;g=WyjMGV5ML9)=auPS5ffe;d|3UdAWpjIY04IC@nW zM`{XwGUXkq=foyw+-+?U!#vA7Hfc~RtQTo`|N1{YxmpiK+;oB*)lp4Vfm1HB;Krpe z4T?E*{Cm8Ptj3x!bZ%)}tg(RB1%R|3dLi`MME^&3%55Vf2FA@p(3zLse~EIT0YN9w z^F~Ac06j}f>c98JqoMhMZ#l|n;t{yHwiX1E;lc-y_lx)g7C}H$^}s5x^a^!FY4{fE zaAETr$~<*%)JH4}ZXQO@3v)uwk0JbpM8pe6aZkE$gN^;0P-3~Id&<-elc&|PR$E=Q zrK8hs1oL5q7woC^!b3`2_ZA=_#i8e>bl30HCGMWoP^ksQ3sXkgr~J;6<4gUS2y+Ax zlod3FjMg_#;Et-!SxcDIw>yFNyy+QZ@f0`yU*;MEb>(>>BTnwJ>OEUX0>lH3*6x|a zs`MZ}x&-RmkKf^lMh19zRClU-%DaDW=1fOj5)?R(np-8DqA~WU6b1dtvdX49@H%B8 z?=>wZRC}lG&P{@3enjU5P0!lIWk5@94te}L5$Xfw`jkQPEpDtJE|ADZge7s4T(paS zPfK#nG{jGHM}=k{>?hi4;LvZBo0p;LZxQmAFo-7=hPyMM9m>V`W&BI~V?Y*%oX5a; z&tZ~{vfQujY>?Mb*o6dazj@+zhKWl1eICDa9-3mciWY@ku~=#IW!L((UNJ$jI3{jy zj4k$sH;p*`txJFRapvc?-OW*mKNl53B#U`3vV_7e?0oqvFvJU9)|Lc>_&t~7NL)bC z+PUzN5+0{$0N=J1(YZg-G7Fx0z3M}8dW_J)T0z{cUcJM$Kc8Ffz|j#!7^69rztS?J zgR`P7^H=5H6rb46MkbE&E{GYc7%EBzKLz!OtF9n|%~R%HxWaVd6g;9`u2LIY8@PL? zstW0_I8+CGS5evdcIr@h&AEM;{{Nrs*P>xQ74H4=kEL$d> z4M3pc%c8f0(lwl*(YcbR8&8Zl4zUlT&h{P{Hh;KO->2^X?C8w0yg?1f31j z)xysV=)P@bDYiU*z8p;r=Vhp!Pf^$^Rh_qbQWYGcPW`KzUXG@$Kzrc*B2~4*UnnhO zAz+Xgf}>G}_UD5yT^SR7%Y<+K8$+rtXdYd*IN@&DeFs?S@{+_dE|9$OTJk4lxQ$sO z=l_MrSQb9fTBfYvm>7cq_^>18Tcd#9dxx&5m4|8Z-Tc{+_thAxCu_S4t*?>wzo-A1 z`Jtvh4xU{tAuRe;tm-z*2vXd?jXmsAy1hw%E@d|!ZxER9_mhHD6i1KDnzfilF*Iv? zfrr=H1HoNMvRx+5IbQYRKzy^8b2DmJ&EeYfhF=2DZJz9Vr zBJ=F6>NF=w#$c3bLM5t88OzF(Fl`7>IssY!fhAK!Z|D!tQZ$}ZWOxG0UJ_**C*F_t zWmTuBRiyAc@<&P0{eLVW$M|UeL5RQSqkhjr<8FS{E(6q@&VlarQW&3cUTH)^F-f}z6t6Th5cZ-Dl}|x)l!WPNFhwjnz?dw| zRP+aM4+?9iLLzmFrcyp};8=eViEZlY!>JBv$^;*eSwB9f;4`(W&)|ylLrdh%;^&jIqoqH)|H0>&n|~4)h@T_ub+1rze3|CM zEqlwmxb4`x7pb$xpi)_&r<2Q>gC8E!U($jk`@z~}5xWG1lc972=l|jp8V)kU&60_&ZPUgRI6~V3|fwS7l>6so}R6Vk5n=@{up9OY~FDj3opY z{Vr&aE~gQi>O?he$EFskCxJFL_?Oymsrs*~gW4p?MS-Ijy;wN@nAY1FXf}}Z<=hF7$?{yLovW4dnLBvY!DQsJ zzwn}&eM^Z}(Vh@Xb|PG<`6I(EYbSM&8Qfl=RoHAh-AqtKmk;BVymY@y$+%nrl4}BO z7?N~W_-tVDQs_4Ml*U2=V9R1eHa(;|sm($uliD5x9uuki{#{x6^zbz~d%ommd5IWh z(k#KA1X4<#2%(}(xYV>am&zvps2NCqxW@Q}aSD^+V`(p7$}Ed+E{Z#tl12NDDOPi@ zbzy^8S1MH6IV9JHW;(YMX<;@Uo%_pXe32Ej7kGcoYBLz5rYFpgK$|grdaFqHq2h*C zxFy*%#P5C$=tDULb@VQ8(7gJ$(t^HX71DNIE}`gz>w#&OXuyo^x3(C742X;-%1J zk(4H-V1Iu{tnAAD($Rj=mLUGxiW!=GyA>cazK8H7db*^Fb_@KP8HwoPC4SVTjv61| zX?XHs@e$IMjYu3UMMOU4=8_pRzRJ4m04BCDi8>bN4|KoN*$>sN;Ws!50i;%Zk8Lz~ z@YQC*Qkx7N`Q+Ev=Tv4?YeQ454Ue@nIs=HxpAS-4Y(D<9{3@Xn56%as{ z#krl^1-uOU9zUw{eEPzd^_A`IwV|2|Oxx*t-l*<)D|hy#zw8*htbMroJkqxDRcY@8 z@m=PQJZRn#z4g14!tPbS_VJnlPoHX5R>Y4%ZC{%!_kvp4llLCc2C*$EYrbl;gTJ+U zrGY8Z@5MxK`KkrK(heFq#uUK`?#9s+Xf@rn-tY3DVr0wZXYA`o#2ldC%sGN_+&`!z zK4X;b&xs6Cbj)au5q>^J)`&`rhQCj4{f$QPF4cr_78UHeGX=vQH zNjf~$g{T{kWIo-y)Rt9gBi_@M<*g=q$t8M`)4NA+d3kBI-Ga@lygouKa^8-cdFm=u zUiO`elpUOL*sM=vXrEjvV?z4aly8e|RM}VdyxVRqn!N|k!Bd4_#P(hg@E3WdeYM9KTs@3cW!St*uf<^0;qIR5j5}LLZX)6!DL_O>>D|J{U zke1EovuwEF*RNFab8>Ur+>{KO57$K3+hL)IJbh%`6*cUZm$1VU?AtCFu-0OrW$FM~ zl@HY=b7V!cNr@<2Ux^T;Dy3gyVkCX6Y5+Bom7!hJ`M|f#|I8v7`mlTd@}&X&cmUpP zXr+Q2dF02hw2v9f8}4eBes$-Ey}l z}-I0tlB3ZG=FVsNC z@@2pF@zO!PSQq(Jvd(*p7qh;Uy_hVMl54$w_K>^SPQ{-4enLohRDnGrx@h49lJK{- zrVxewsT%I;nkmwA#Q1Q1ZMRxiZu~VNkM365IROQ%UwzT6%g3zKm&thIH4N&TOCAUL zn~?VHHFsr9C0ifIsH!&R3-~iI#PneCR86S#kqhRer_P)dA{ysk$Y^(*8E4%vjdJ#7 zO5FS3G41SWx)8Cwg4`yXLDja^s&D@34}YaB41toZ;M+@1*o>QA6OE zQ04{#-}l3piL&Jd0W+C`4!H|ZXZ8i?BQuro;Oyal=dmzg^}NaU92;qAD-j^46GD$) zbNRoKg@niU7bPpni7@WckrP;*b!QNp;vMh`nJ;C)&KY4snxVzm!*q8q0qU)e%?B;9 zxC~T|&NTxn3tzV8u;`{?*0n|hcvpG0p>39p|LKWPb2_x`Yh2=s@aE^Ubx+p&R5yG{ zsJnX;nH`&`Wz9xN&5$oB>}~H|NO<;4)fRdpFZgbrBJTLFOKvd*g8uUzlNzwt*PkP4 z>fM_f&0fDg=-Tp`Z!LyikvYE#AM0w)a_v?@{wz(DCu363(7z%|2^CJM1;!Nt`ucdR z{V`ql$dLUxqI_*0K`W~{Eon^*f)AD5xjyb_Bd4hN=z6ubJl58p)^mS|yk9Ght8b3J z8FKmDgvV>o#5E}bS_>av)XjTR+k7yKQ|?gk>d+9!&g-4C?z$r8QY5ppT$7b>N z?znKK==sI-*n#Z7u0ZBx$9$y&$OPrJ<#3ow_^FBP+~;b|sBv=s#LF8c;%Ut0Fqidv zC3_yWSZT}7x$@yN=GJR4#D?@ff;?zNE)Rn4?uL-aVSRp(L^V2`_Yh5z6y@WV88}zz z{fllpAwHb0CtlrB{k61WjjyhbNyaGx=c%GOERZ0e4^2YU)QqG$7fwj<5j(T>%!WC& zj+S5zDE{PLx9#|>1>4BHXWd>4V?dc~VJZV; zlUSKR(A4ao1<~kx_p$j*?@olF?yn6+RFgwO{1~@S`pZ+1ylaJwO{)AnXwTs)S?wWm zp?mTgb+AMI+j-z%GLQ-BkI<9!X4z>n;_=6X6lw#@(?aUQ5jws$xT70%HpO5<7&v}~ zE%Q&OBKBJ~bUdYWrYH*l8eP)BsJTV{`@(7Jh2}rDX;2fjz}75)`xDUDy1v2kDagf1 z2Z}%D%ez+wihoDxYjLxEA6m`isCD3tJ8WL5HSN=^`IHkC3jci`$;HG{f*On`e>FGs zVP-p|>RG)~dv$&7_H$eAVHY+B`SQx`XWin?^>wt|4Rp8vy3h7``}EVNoVjzK=fXK) z2~hVbH@bP{-pLC)tqHg`Y+V`|I_O2Y?BRO~eAfhaQH-Abi&5X=_S!70;YvRU*LPpv{)?SN5V(gK0(G7X zho$;!B_5cHU~+@EH?aK4dHPghrxrTj6V^X>2Aa1m`u1*~lYhWYPwJiSer#{cmANYr zhxp&PcY+4b1712eZyt;69#-YrsNf5t4RqZMHwGZ-C;;Ali*GNzkz`OuWit=4zQol< zC(&}JvSEz>E`~J>EZY{}-b|B!xcGq!?arB56J>gW7sbEu=GY2r5wykZ}35uYt*@IasB$lO%JKV=9J9} zSDf7&$G7;H?5|_r;uTl$rySK|g~08K$2(d2Cou-;HX$-KPv8 zdGNEtrkTs?5{#Wg)(9-tLIhXYY+yd{#cTvv!cuOINke|voOi@q7@}ZH3Kd_ya;*W) zD{Q2+-)dSvv{f>Z#X(Ko*TTFxwu8b6MoL7G?FVdUEZ_ zuTz#Cc_XR(TO^_&K58A8Ho@tCzpb5D3#x-U2`~%-YKI+#x4VIS-(UJB6~{5E0OVK%v2P#DCi=V zb`w!caMeDs2)f#cYp8zEkZ8LpXn28@OKozi+TzKa*n@qE*tEW3gAc04ILMN=9Id)yVth^@A=>Afqr&y)8UT1y*E{v zc@OA|=k{Yqv_fuXaQj7q=ZV0D^Y;=08~~6caFp?7j|&Zp1V5Js?J0gN7rT z{-?L_=y=Odr-!hqb>(Xc3y{jSeCbO!1F_xs2YlK$HG&upJs+P1*@4GV3eBufKYz5& z%F3sIipW=?@Z9kO7e`3=nm?H$Wr2rW>OI%Dk!Q z@&m5WG9Xa4dDlThV7+o=dmY|XUAz1acMLcnpBK63UaBEGT4{aL^D27Z)RMZ!N7c06 zi3N4d_y0rZF4vt*EXb28N3KKCK@HIM^ksMN&UmGMsTQ-@&wV~|r_Dfk$i2@B%S_q1 z$}S8YBDSscDyA21-YKr>#f3vvkdRF%UlSh`(lyav$|&_#PnC-$St^+mSH@-2u`Bjl z3h7;r7rUt^f|#?E!=0ANv9YI$jlx&)PdQrmqx(`!MIrI2)|Zfq)&0LkZo|9ve(Wtp z=pB%SQwLa#T>l8X@q$EcOQJWot+2iRnp**8nZ`hERUf<3p0q&yJ5UtJziak%9Q1Jf zH+Kfa#pT{A1M0g{vo8COb8q$lvWX)~c!(A-8v^fFAkL9v6B;FS=v+JJJcPXc7fhu6 zG2KTPkcG${M6rExmcQ5$7D2Kd-(%)5$75yK(Bk_#ABnOz`U=J$R@*Q$YWILgP;)!E z0sa$JR|t|RtmouixU30T&N~f^%a!r^%<%8E*CB$Q@pQcYIv=CV3thXV^R!a?O7OyO&nrv8K& z!E`atyg6tAPtW!rTTjROIdTDZB7Men{$i);eHAkdJaTtG+8Kt861XM;ob59JOv^l_ zS(Q7PaNO(&J4qlqU2#W)J$pEN^_K^h>s*&k!O1kQ+0-zo8RyqMXyO+93JcLcUOCsG z>x1$;5rM3;#Xeu&2f~*cx*TnZ`qS?MBW1Fi*Ve`B;ah`53Ne=xW1(Nntaf z#YmToeyl(XQ4cyN-U8e`pma>WnWwmwN+lf+kE`Rd9hNxLXd6_f*Dix8+&hos#tpUv-s(YHje(=S%2Cl<(uo8{qlh(gw zIgCQ`GcOxFKIgj-TX1;phQ*Z-V}paf6Wc@;R*JsG z`gg%=D&kIbN{b*GdS-REZ1KT40{DlR0nF(YmVZ5E)y%5Mj5`dPMO`feUHL__W`OWz zhKsjy`-?o~_z7LzS+siwE5uPg8eY`c&~jDShbdK}*%kPKUY#-{Im3Of9OCx#d^FE8 zKgh+_SpVAt55Hq21NtOs-}FQAs+G7Rw-6QHh2ejCs#i8-bDOZ${MMUWF~pyZB|R#D z)WX7~2H}C_&IWDgXDB+mk=H z4P-zCri+C{l_xt9;o|0LnK`fz9}~eHDxNqYWTX86S$u2VUgTrUVFUQMW>bsTwEZwB zzLsN55-vvL?WiDFTl4V+Ch+#01v{#=OIc~>Wg|IcnAvTF>cK6+g;o9Pfw&6^pdj9f=D4UcopxB#LHdF8=0; ze@nx{+PoX8js;z`{`j!`r$B`UBe{4Q`1uZ6BUTv*WSJAp<&TWC$b_d4$2@| z?9axP0Vx5i>$bki%NysDC<0++Rq&}`nJhZ1Do+}*n2V$Sj_~1c8%~gM%R7r`L0~&S zh@b0`!IwpQ=cRff-7Dg+c|&v5mj77d)`u*t5dL!4uF7PKwo!fH93&)Y5Qdiz#i8dj zeKWo5^q4$ItJPXF0L&nw=W%Lz^o;(ZQa1a?71Wq_9QOTrC~RF1YF9pC;_0vR|W`;es8?nh+r#n}5D#99C>Kr`|%%O|Y zTHE);31#MVDRQqWgUpjn>BHq}0Z~67SL!c;i~- zkDO4DQ(@-CF84I z2u9w;9nA{2ZG4aDsPck9`@n&F2@$J)sw1e8(^v&NoXRj!`At z#0ishf4w&2Dk8c}a6M{?kdOwItc^e`R)#y4#!oMlI`P z)n3hoH@O}29I$1PfbVx^5OCm9D*Eve>GvxRBW+ilM=aDFm(m6A^e{a`7x|JZa@p>< z+^%!i9M$SPNg%$_;&;F0-~<;sQMHf6;UZatuSJtT4NZnkc_);GRm;x%BDP| zftoOx3Vf1X^I-4UZ}9zez}1_1gKCr^CmMczZu%i-fqWNH!h{WG>{7L}6OCH>7 z=!-Hi6QMeiv|2Q(?f!O&hYk4n5x2(r--LH{#gckeFRlv~>}%m%NKL}rXm@C142!Lc z_z@KR1egP_Nc`DMhY_OilB2^)Uac+&jOp8cDda8z{E^VV4i?M3g_9AOHXBJMnMN&t zp6M)Jx91DH<hBLqP*NaoGEYjjjTv$#|p z#ydpnS4_rwLRis};&QluvMO_?b>%r_RWE`#txsRhE0q_PkDYzci-CC@F_c!6&0ed zmv7^q4PUM-)VxAv<_t;!{P&fASkuUve8gAf`LX0Zl?+Ly1lSy&jrg|Pch%XlK0>4} z@v6G(0ls-eaNi^=WScTG8>^b1AUJmm5$F$X#Ra=#m!aBX+FJyh$usX<%^33991AH_ zu$EYJJWA3qh*q^1LIcu@#hYS8K7S7!viWT1Yo?h&B{~|7r1YjHFh_gw&dXzC?@!TN z$?me6nA*31J^b4OSp5?H z*APO3+?Rz^V!_4X*T&53dfM>F2fN(Yn;w}MHq@#)GnGoFb3Qc{lI#TWK8**t5sr=D zV^IytCgX67&w7lvlf)AyKBcA(izgBqLRwWGEaKR++lO8@T)g3FV?HzVmq(oX(Pl@t z?C9!*SbeJueA>9-FsH>`Y^6#smlNhNaO$&Igzyp=5*&gofv<|JqH(txP{eDPSIfhL0ac2pX?yGUR5G}mwwAX(lnt(#B_(oi& zGv=P+N~L^H8D}?rG}}Y$qDKr;7<`FY@LnsS3pphdmMt{yX~6g6I#r(N*d`A!NF8ro z^W~oYDkNZYr%%=V>-PeXH_bs;y!v$Wbbx6*+_pgN^5+sB>m!nly8#P}*Z;Yt#ZsRa}MS zF-$YUo!))}r&wqgvr!hR+Ik*oGZN*b^Pf9h@NV)7&WgnGees?w(zs?U6+iqV^cyk2 z1I9t$Z++M}WsH+&44qV4r)l=9IyMTv`*R`mq8D+pWvNLLBRYey48gpY2XB&w{q(RM z)#k^kOQEl@noqaRteb4Fq8Tx=qsWRxFJwY)*Fnq3+29;*4U~>0lqgaM#J{{M@c0kc zNLO0RZ6})CzBMq?jEDwmn(7k&p1N5&Uq6za0lUghS`M@xKJAqIwtpouPP>y$kT0nt zm5&EIT@;+1NwJQNU%2aKH+=4}91okam%5;HISs z*$`E6Md|x=Aov^jqBVa}nlo&g?YBRH+*Bf3kBfxkALkx(WMwG<`O(iff*zRIpWGy9 zP8;7yL=$AqLws3HBxmEs7^IjNVy;tGjU<_$%lozT*bplonpC%eH^dC zZv{s;a40G*6wC7+BHx0mii0dN^p?QRYa1=t3;Ep_Ol=wOO3HuRXG&$$RxmNOR~RCv z+Z`hL|FJh$Uex?boXJw1CN*KU3i|@6{?$^zcWFQ*t4R$@j;4q8vxO@{%vHfZjLO5d z|8io1Ram*smPce`nKU}#n-iCLOq?*&E9*EbZcg1S#8k&^z;J^Io?=sz7SbiRkp2Ys ztjU3F#E5O-)r4!N?{I9fV8;vl)nGQUA+}4sK87ESXRDr*_(wsVN1jv+`&Y^`1ZH!_ z(mr9t`(HCnvDavZ22!XnX|l-G{GNu^-#ld#>3{B*W=AAt(NwUj=5<`z8i}-gt+eix z-)MrI@x!SHUsrh9Ww#QD$C4+kb2Rf_UN z6h9~9WHOSYC0nv(oi6F5(2yv1ny|aMjw9tLU1OP(l1ZL>XY6Qy495VvD&U)=T<_Xm z7P?Am{_HwW=?3s47Y>J7p?_mH@B1sT{+$1&Edac@^yFPun9;g^#I+VOFkGO@mkd=%Y_SEV#K&?%*> zT8sPli@n&XZ!aVoqN(8_eNGJ5^4aNZ6J*(8-0V;ZxFcswUYe4+C-2ZltJsG%p%N1@ z`y|>+D3d3j<}8tGc6;{aaT_kl4@+}QacHFxU8**G$Yu2RrK(>_7M72TjNdrs|H@^> zEJIW~GT75lyGg92@i6xk3mrP}GsW6CgYOVi-(bmvh{m0PkwwZhz2G#MkdV2X#~?Um z8uahR2GmW*a^Qm;txZiA5B;YP-zN9`N$%6J7!`=M;II{r6Gt8TF`PmM7*O-LI=;hs zu~MIM13QvwaB9`zcwLLshYV^=G*=fa1bs*e;(wkkj_G3jghMm|^c(+hn?qR~8#Ly) zE`Y5h`%A+OUM@EWuA&nuVaw2PZ>GTbr*L?+a@bMYIb|?qAvkKVFfxVc>z``TPCiGL z;2g55bxD4Een^?=Y2m7imKji0BUJDF236-m^mpzNHEyq~;cC2(V^&QhRjPr-=YOm! z5&4TV_obiXgH)3HWB7|VxWZKy_i}o%GB=uOuTg%>t{kx}@r7-uAaUT<0GPrHMsC=w zO7O?~(0nrQPjY#EHl|el&2KG#j)VsPt3${$BN!-|=!5Xtz~)*REZb)D!PDk6ePyRO zeJ%T2cK$CnT>iuB*7Dl#`PNc-Z&AflADUYh^X4Gq6h5PL76m2agk+J=B$Iwdr1aC6 zWRW{hEl6fjVfL#lT;>CPtQj8ZRuGYOx~SMQg*`s$L~(&nDpNx8f!dOg;{VlIIXYHU zjP`%MNyq)ahDk;D`0vrPd%hmg-2e1H$9I!RY3{o*-s^MSJ#`gWg*Y7e;WR@}_N;IayDB5z;h?dopei28wD? z@5#0RG&9c|bvOOIN6~|g6D@xC?B;eTn9VO%XM$4*H#8~PIf%A*psVCALVdFeact8o zv&?%8bkdyt}Hd_S-fY>Ci+cz%yGs(RB3r z_bYvS8O)VLx?^Tym4GZ|0u+JnQWKmO>5Uw$<;#KYqFS=h3OChj>hl;k%|W0O`B~{8 z+LrviQ|LF<<}D<;=yV!^rYN`!C1yveei> zV;8bdG14X+@%$|OcYD`Hz z{6xgwvVmb5R@8ZDPACW@T$ECA#y?110_4xL$fHaW3ZTr49%fS$hkfq*H(O|F0#$iyf-2+xY z!dnsT&gsvOIKEOtuysiWP8#n=$&_NTyaO~G_lkZ8XL&wGOo)mtK?Nsg!P)c!kUzuQ z>`7QUXzK9po`?zb|7!C3K+fhLd5z<1qU*CDE?r<#YeTE;xIZUXt9m!UoG@M)c!+oS zk@}fp{fGQzeSN+EHeTBhHM`B7IP-UqMv*X&%~m{wN^7#i-VE_s1dd=rUXicVm^|2> z%p)8ctBe$M`ME$L=sJr9PM5o%-XjAsLEs8XIBI^IRYD`X-WHZiMWX>6=2{V~MELdq zW#xOfqa_YOZMZVIsoRY;ck%7Ht)MK^JuT|IWfFV1%7{bl&l9RdjIT2Dd`fb%*B{NE zOZOsjf&@z)>itwRJ|=7@Fvp@ZtPWrH9wVj>~O+uMO2XD z{owd<&fV7t{@U$h2Ks~Xtal4k8t>jxf~KauJIuBNAj_$tp@+N%J?V?((`?}4EU4uh zFYw`HqO}c_GszbI;Gd@HQnm;>c#s3-X$jvdPddK$f$+0|-HzCX4zKfhz!$&w*-vV_ z!$QSO6o1r@Q)|BOv;IRC+MQ6Ar>8l9e;H0ddmFp;7tqtyldL~*_Aq1cP0$l-+UY)C zlY5hRZF1wO{oDS&+g>|e;&oL?H}>KFg9))N1Z);=Y-kCAO9S7EQB4*VYTaZ zqFh)r7?_R7Rbhzvt7DYf=8=QGeI2%I%@CP=F`(pCY?i55&m>2WFgdroA?)uwaR~H` zX8+y$y)X!>qEmK4i!hT!S_OH~ZJS=`eMg3Kypr}=!rMP)bs@}Z|)}?zB zYhJSB;q~^Gt(^31@j$pn#Wr|TZ}CUmOgy?kGuFMd-qNlMr#O;WQHsY;_?zj2y3y&B znJNbC(!M}&BW_iG2q_}#yiPFe{N9*i`3>q7J6(IzCkhkpvUKNx>W%ncPmTyPOH_Pb ze;5D4f&~jiN)<6!#WPFhG+cXcIYgQr^lu9M(T;-5pvmkccVhX0k$r*$<~nZg9dIVE z56f70&T$9F1-7mc>n--#hh=W7 z*aKYd^K4=7lyysPaBm+FGx-U7fFDAix{OGSKj64$xfz`+X5aJbJA^cbk(zh0s)ASy>^Ta&%<{JXMO%iqx$@*+0diJ~r6Su&xItt@~Z-R9aSp zT`wU@#P`KH-m5^*g6=4Nx29q8|EJa_<7 zZ&h320|~~D#)3>x05Ma74#4FH^U9Ll#RyH40wI*Qfo4o7?Wi|B`*fa}@*QZx8@N~V zJ#F{r;Lpi=AT698xb)}^*oW{f!k@uO1=h9#3a(8aBtPHXprB{XVrt1HgT)pKJa zcX#AqIeB&_ABdZ{`~zb^2?s7sNMu6m-iK+qYYYeJMNo);CqkpsZ7pJQk_jd+DO}p1 z+b1oOAJVoD=$@6hX9%8D8Z3+8+rjUC0P|KPc$iAyES9uwb-bI3Xdi*J5A6e4gcwSg zW8g0lfTIo-_9G>~F#rM)16~0S)r$}r7=EOGlq}?j9z){D9NHLX4)z@aAbETLdN;9Y z0J;J;9nM5!GvyKG(SwO1mvXfWCI1dv5*oKmQC|2V%5w=P1e4eWAu2Oct-}*VA%r^D z?OyO2?n_Tsriqk;or8>eLrOZwP58EBhF$+Nns7e-pI1n@`v9ILyI1%f3cnQ#aBatC zi(#SK%++N3Hxq8K4__f`4IKBtFDAn?{wWR`wF@+R*5d#|^t6F_uW!r0>a~&Le@RQQ z{+zIoOCAtvNQAz0hv#&+ik4j+3K1VO2+0mj>^H!R9RVjpv`fk<9y7|ct``Q79TVkO z507Z_QJ3S+Ha))w?Q{$0UI*>mwySxfkyY@Pu_;(ub9DSHl&YdrMW$QWk0 zVw#E^PDU`y3Q5<*@2`oo5Ur&DY?zZf=b#X0Odv?3GWuDL8(Bhu%$Jd-+uhQySQZeT zqGDSV4N(QPwgK~&dM1i(LIT=irLjr);EWITrC1ut1cza;i2o8d{ugEM7+g!#e*4C@ zjUC&zZ9CbqZQHhO+ctLWWGC6NZLOR4t#eM*z4w1V+%He{THQTYRnMyKUUU4OF|J=N ztkeA<-ly+Gyq~8ttEb-9`lWAhY=%7*JL{`>#Wm^M3^;$=S&2=v zGLILz{>vsi`S8VrVKbgy;`UJeMrjY>*{_g0$y!tzP=6v?!yznr7 z*G00Z9SYdsug~~lg`pd1P_NjDX7Q)}#+ICg~_Mju?TG9w&% zh6E^OqNnpvH8bjaVuLZX&P*YQnU0Zq9nX%l(=^(&GFwrlp?hrQja?hlO$kc=MPJTW zR|~f&jRD`c1p<6Ssne0?*D=qwy+F4M9V#d%{vBkp4^{Ptxb}d}!EbYVE2$Tj!9N}&E&=k062*f+ zmE_k!;Zc*~g6G+sAP0bY{rEwMJ)foSZB3MI&F)J|5?Rm2gPKrm9@3wix$%yUq4K7t>+(@j)~cu9-{o+}iWzKJ$GP;}wO|oZwrbSM ze1D`MzMP$_?8$;@dV=1(HAUx?RXKXtQtd^8-SyE9muUguWB9f=?wtX6e#HOGbsPZn z*gj}xtvL_?#y;Qdo%i?QGSB>lx0{2|t^P6P(7#LX9`oLJKXd5kNl;&>{kePmd|Y(` zIKJz66EH@Y83F|XtvJb|e*K_23=$Yv?y<}~w>oxxiE{Kj72Y+f87)*ql$q-jT(Ti~ zVSy9MjGlqHRpFK?Q|{X*2g;_4RZ_|~y~b$9Z{P<_hROH0vuw#Q892E}8_TPln>rT! zI(V=0tL$t1782uXFtFA68{a<=@CIr%rJ>_yDjRLLH0IRc=TG)^P~+t82RnqBl=-oe zaP}1+{rFm8*BYcz94Sk1&N2%`H;&$zeD&1e`AY<}ymoMNlA+!-KB;WL zOB*DLN4n{+xI6D?<^YQ0-=_T3=6Jt$>5cM-hxS;(;TNiY_55XiJ~AITk{a zT3X&(DT3Rx$bZ5d5qK2jv2>G;sWplO51A#3#?2#1ye_x&seEd%VOHHdeldj9@j{km z7R{nZg&-Wqusk>%K(Z-1Lkwn+B*i;&5<}#s9@r%4TiPjEwZRIoJ^TIW7+L5Xhd*!J z-DLHd0(-bkCBJdRwJ`ny8CAW6Z0&LVByjo^@g7c%?k24{B2qC*heL-EM;WzTWsZ?+ zx(52(r^%R(M&3G}QKdv_>-}Y*m9QfazBYxU5`QwPlx8oqo3!Siey)A5N$92)toau) z#-hP4`7pUJ?MT9-!DQS#!af*0tezgJB~(ZY0=W}Y(G{yVUxH9CP1B;9=Pmy8t93wA z*U*Rhk}JuQdY)6x8CQ9o!;t80MF;nGWpn5}eoc7G5@V}{@ZqkVCwf-sEMzGzo(z6U)-Tv{e@th&kK2`r8O$YI1BV`zy8*oLTyDEMOF z`suAxR(y}%j7<)qPR5O)S&bj(hfX^svSldlCw^{BNCbCOYxV5rIwil?aDDMEv19ns&!GbjbE5%tBrZ_=w!k+^ z&k@Td%~e2i1uvq4*G_F$x)fS->rAm4rAmg;%rkWTkZe!c^@CL!P~j(EJua;58|t@E z=T)a|p=+_+d{!p`O~cr&^gf`+-LHjPYA~Ijt9&-Up|}kIQ>9b?6?4t5GsTP8Q|F%! zezoZqQKidTw)_W{XU!`;w>@ZY8={A=#)dKBuFn>I>U>lnHJVov=kktz+F+=t6kCcK z()KC-X~im+48WO`x7E}d-?}XCvO5`zFKbaVk~%s_#nwhjAJiGgK!a=To4dI#Yk$cP zHS$_N8`vuEK9BH&9c^~jL#L%cR}3+6!VUdui8UEDF_-=(u}i2n1Y4e0y9CM7qtt#@ zr#~Qx@tkie?}|=oWrSLF_+w!l=qNlgl(12cR)|=fEu?w(zHU4prTBNw|5<(EJXz>r$@lEaLx``7OZaR6X2~C;O z0@tvnt@$Of3iSC^?G{k9%{k;sbiQqx|0G@sU6a-|6g40p6f~;!0(nbZbq0RZV+3on z#ij_KSu_`U4I!ifo6BQ&=PSNTPA7^o(YMo9dl-8;|59g3iHL@z7F~HSjNV;M_tpab zAa#XeMf=1eazm>L;gb)iFv^aRH?_~Leb+Ynp$02qLYRSKT}pM2?esD$P6L%JMFr>M zf<;mT($tErRR?i~by*~|MT}d3fK_`?&j>YV;wT=xEI-%9A{rKu8s*<>ucl$ggqp#X z6FQWy!yfuNef}Anru(}FlR7+=W05oL5J>MKZ`&#oVSGQ22^{K^H@7n~L7O#EVVds{ zOcf#btGOa@8-n(`WwJoM@pA8~P3||9b%ac2e9i9(;m~uITJt9hPz}1#KK)kGlk&Y| zy@qea^U`1~7PCRqX?+jLIv~XN{3?J(ua~bkGv>FOj4e$3k%A+#l1=w{w$clYf=}Q%ylQ5b`Ed5oHTmiUhvu1wu#vbv*nCuCr6C=}3x3U-1|S+@I+n5@H1 zqcJ9GU;0`#4nu!qvn@Qc>$-Xs`nj_H!C~mAs(c;kvhd{hI0E;C9fF9VthjAhD;XC& zO#rxAubrjJO*s58)ZVquMsRA~9o6oUFO;1#{{4KU#=ebb;Am z-!Zf5kX4t4v{7kF`fiBvqN)Twhm8d+IWwqiG7}ee?7L_Q8)Io)@XJ)ELP_1h{ z#y_UH_c0n0H=Ua#Noyoq6YO$rbmB7hwpBiox6}vuM&x;q64NmXwTxe(Z_*E*ggLQdDCDOT?YyMO*2o;H-P@ z6RO!T8Lo#=$hN^HFiIWY$tud|sCG|lH3KUjG0(?5?UR77!74+8JH?J)uX>k?lYyxY zTXgeCE_LaoDr0$f1}ABbKMOI@Z5w;SsT+BEK#agStUkMqopQc1Eu0Fpa&+7>T+AE)|Ax_do%E|+h;4CNe<69#-XYfEkoPMl1P>KxtJ=#|LO(Y?$fDo^`8+4_r@ zW%B!^^!pVBWknGi3=g`At|l;vrgc(~n$mV;@JG zg)laFI9Ymfv6?P}PxCPL@eoRAA^yG6GO3Oc#TJ#@-+2N09gw%EXu*LaR(?lB{~MVq z7FXvy%>#-A=%OB2v5ECeyx4~~0w%06;0Q0qqG>mb3u>X9GxxabS9kDZ6+!~g8M-hM z5t~>QG5^$ni>6s3OfsXHu=%F0&%vLtE8Z9y>rt$GSjjoxh8+{q!eRyMwxC-ifzVb zdL?Sj0lEwtD`9M&{r*Wcf$Qf`bdur4juLFcM&{}wM~t;bbbDZ`=D6WR4BsEP5aHA` z1udW-2YBB~ge2R(zeYrymXk>Kat|*!{U3x#my)pfnPGwAuXWu4{uF0XhO`ZAgkn|>RV`Y(M@;PhBwr;FABYGKN(Qy4B&wB*%7{Q>b8SCUdk;?v)Sk$g?cna>drA>t{q*13~nJ@8CBBLf#d4Q zxyJnw$zT8C{z5cj<4jW6bRgnS%y0X}KTSMP2EY4Po@Rz`8(zodf@HSLJ3GcfIMW;o zt!S+chyV+*sDr_=jdiMI;`X{=jZzook^ub^#!VgwLK~#V{gr@^yz1%JXd`y{LXI(G z0lsx`X4>3mwda$sNolM`4ZG|Wk51JCR7IXG{E!f_7z;5+qgdiD+Ifi=%Vl!wm+hds z8IG*lp#tbP=UFpaB_y-cn?rv{tps&7}q9TJ{)A`t`plC^Z;~ z&R4rfA(73fBnk8zfSmf^RILr1mo-~c%j|V&DmTr6UAcb!hT>QB!eSI+ayB(Z`nF~O zQ^=NtI#34pNj|w9jnmw))`%z6CM?iOBboKyZ`wf~^moXi{;g?bAQ`djl2CbKn5AE2*%2@iB z_X^94#zA~s0={4MyR_^(<&Hygab&g&9hgfcG(>+r`R|^?@8J$HHqd#UVp|L9UOJdc z*k3;gwOIF&?KhrjiMEhG_|{K)q^Y~ex9!2nmySYg!zoKYH=9L4u=~^++No#h`=QQW z^~k*o(WxnQn}#W2i%h-vRI3fibEVQZSQTJ5>0ZH9N;oJ;D)>^=PhYDlg}QX8zW4V+?{E{e~%}ln1&` z60|^m%k>|2n57Va3oVi<@YIC@F)ghz4eZjDyd0W3{}-sxzW46%gzv-6TPr&|;l9ixcv*lZOSP zXE{V=19h*V*Y47!7O!4Zi(&_Uq^q5YUw$ePCfdhx7mm6VzoGaYDr%P9nhXfAv`!F} zy}vkaNBtwGnIG~lRfsW(2yt*XNehFLVGs2tbd$j97}+zC@4wk;HZd|pJ<(k!)iq{W zEs+mvhMCrZD?zwPmcpInYGxv7eu?ImK4r)DmVJB9yG)`XPGmm%5Py1zmf)ojEeIl3jPm&_$$$tj(IA$gVPO26RIO@++1HMNMRvp9hXi`F8c?Vh}_QsKKkxx_f-6mcRjqR zta{5aUxV@cM;8>XW7m8A$Zf|;T8Md2PGMljznL3jubZ1E#>{Rk_?c;2%qOw>sHbuAM4NmG>Jc%al!)M3yH>WTji#7j7rHRjV{sB%+bAs zC86NRTj@6ncdAtuHS1%p>BGxKX}`P1p6c$%$*>1mXq&GunO#E;hDRxmc=@ zXzr<0h)4#nbJquHw-)r}*V=P(KAk_hD6OupE^TJTrH^d}mJ>uSh<>pLJZ2C5JYqxdeM@zh*MDd;OZcOlyc$7BYAf(%5-*heHk-?E@vK zOSoHokFzJ%Tdur9oXxC}7C|UX>Cu~{cRmf(C&|F$gjqig9CWXiQ%lolIU@Pma61^u zU;L$S&M}{9l@j+{p#gdTAqe2TRqV+TEuovt5N5E7aD-KjX)&DRqr&ocRN|77^2*`7 ziSO>PVRi#0bd^ba)KmSEo&D^MsMl*trhW?73B7Ywi_O3(6DcJaen#3UlyAs~>I4Xe zk98nJv~ya%Se-mh^==LazRjatHHtXTNMIeLP|Iy5gk@D*kScJ>Z0**LBMK5?9!3S5 zeG=fiZ@SY*LnXwyBgSremP$`BaHF;{wj5PM>ei~D>d9FIhTM`Kcc8Sb(YH^AH3bz;&vZ&(5`!hX0d6gXwd3IzO3O(as- zHl#_7AfEWgB3YuRReh3<@&$4^iTDri78Z?}<-SRbqR10S0#DfQgbUXdDH?aG!eQ`X z3cXmRa45(LlOWw&lflCZ1&ke9t0|G9zo8SLe@tq_QX*!P>A-@y40Zm$z*LWF{nI7u zLSVXDUdV2nXVFxfND(cBnYHqiC*Mt>?<{B>BBYA_oEU|#T5Hq+B>io#N{^MXkQ(I$~ z`k24g%PYf!$2apUL&Rqg`y33IppZNxEtY9ZT~F?+HVAe>F&9mgES^$|uX>$Y>EfWR zFsTpOfV7(OwIPLcZ(3=X0$K(+)}u4a1p>|>u0PPaEKJ#&VE|nrR2a$yc+CPhxI|WC z7c&JWbox`AVjM+=BDa}C4{qXZd0LpOl6lJ@j%vNHecudA}1(y65rP>#N}ZEvm& z1ckqzzhHJ$W+N9#(o4Uu7u-6Q7Se^TWB3kd1;Cw7ZV5v=SXyfd9LjMV!rS+@gs*O! zm$!BL+*9yJT5UUP^T;aqgg3mn^bN6^4R+tJP`^YP1d(~LsFT$qp`}iy3{A#=v@i8k9FjumY z^;d5dhL`?bia;w!NEPwr&F0>@NCz!=2QO9%k1hzgpou)jGP-Ot!wMbiGP>xxfA#}; z#X-*81#l5Cj)NY14B#PV8~{7>8vc)8BK-F_iO=W%9xiFv_w)JK9Wg^iP5!O>zoU$R z9?Q}WwD!x|6hqD^#Y4_8l|}vEhCksy{-1__@C82p{6hc=DF5K^C$WJ&xGyIHk{bhP zZRq~pY`XPtQ`g|&{hs5^%e?hJr1X~qBhsHFg)5MPSep9fsore-8~bVV?b_^{CwigY zES~MJ;mZJ>Oy2J_9w|be=)h{bm?%hAI*YVoDdT?)3bq-~PJ;6>>e_9Cc;>%Kpn;VK zv^K!974A7H=t>+$oLE-EiYNbaEqOeAe z#T1i~HS@_O55lvP{_@PpK@6ChPLX1F@s18ttEm<(0Fp~+W}TaK;HBJO2!L_*o1%;l z>&fR_E7mVs$y7pY7s*yv0mG=Uz~-GDRWwYrN?)|Th--$EQ$O~B9@)bK9{abu%$9ces_~BID$!ASWM&EzzUL==0&M2Dex0K02@lub|4kR2tXeMj zS|pL+-R9)b5-t4j+%CEa53fm1*&a-wg|r)Vl#Jps?oP>Zo`c7rJVFA!Lp{NqothAl zWGux5ck}|_B(_=DzFTG@u`5=3#1Z~!K}<+-13d#yCyzEWmvi2aNeGL`>(a>! zoVcZ2rp~bjWP*#nQNF9eksMQtI~~d^cd33^4>^#ywVIr75yG z%2#ZjnH4BrVq+f0kGS!M6-LW|o!xk7?il0-{YjK)KCZ@#b!(l)<@c`lu9SR=N!??f zBw$M)5igv|ht(~`B-50e9HK>eRt`YJFgYRgS$ikQXBhGSvU=%nRr3dAk00Fle}A9+ z&jpZk(){GlkODt*cuM$_Xn?Duv*q>~-wOY8;xxL5ufRZ>ct_Meg@xIb0&06Pz9TRqhL<7;_}|Kf@x$HIX%LyA zf)8*>vj4uByg1u(gR(`DrbI?qmw+*_GkMuVsIf(G@P0)!RlM~_J?HL{I=B+;K~e0s zP+Z+6#-T|^FN|7y0T8$OD5h+Gjo>&NP!s( zB@-;Bun_!1gE$S+5=1CAiD^gSZC@bCZR~O!yYpztj@XdSy-(NTy}Rd)n6p4e{1*h} zz(ckD_6B}uGRSy8R+d96IsX&gWPXHVDQL)$THk+EXNpJ2F>;)0jh?8T<>-;k2^{U7 zhPvQ)*s91Kehb@GoHNP|xf-g!3iPv`C>d@5y;*FR zm&qp%^bUg8hr8y(Jl+CPvTdhb(nh<~$N>g>CtJgotW8Fn;!(J*Yw-}$EEq_@s9E-5V8R+8)gt%b|>3!{?4~_lj%42=v}tU@|Ab? zA`8&VOZxN=TA7Bc>3hhW0o2#o)z)Z#0?yCd{v(=X4ghdL1xQ{HYXBwKtXfluH5Q71 zd4!;zW>heRXoL}s>x$bcWX8!8ETf}_Z(|y$t_k}G#SqA(z#YUOjR~u8H#{gBi}0A^ zg5SX{tw2b;ev;+!YHq|8A_~#qQ8OPj9YREO;sku>wDBdu*lLv8=#Ro7cmyfG3aePn z_%Upx5T8wt2K{TgYAA{83OWj-XpKc-thbbyG`IPyRZMj0%rlHifU7wohb>6((J_oE zpy+jMp$tY-_>kgOvcL(oKSA6hT(2)7Khk;U+4I4OAxPc=h&`IxoH0%ZlWVXYu`cV3 z@dV)%o`u6QH-bJ6^Po1GP{H~I>Q1iq5Q!eRYU^7(EOrDK&;P|UJG?D8b;4VEAlfD* zmgU%L!kgQObkS@%pjNSmAXVtL76$*DeR&kO`8zIndIvcjD`{pcx|0~&p&0vG8Jf5z zMnXTW6SWG_SbB-Mt3hIz(XL9;HXZwVtH<_xGwIbwD%kGZO9MNZgeZ#HyYbsjB9s8c zbmLQ-tnHPA{{6_Su|^>#IybO1{RPP`s(KVCP=*Y#w@`jV+;s-Tbc?pe_K%wd2N1%X zK#3dD)U;iznThLKVsfZ#oo0gBL_LmS zur@(pnjp?I@t8;v+=pUI=$<&ju;O3Fo|c51013hHj9K;WJr%eY{+5I6c|Hp0Xyl*; z$`PW|>evCif5w<0MklAIw%rdl{YwyqTC?g`alL+8>08wqy+>-6PRUw&h0NA(}#JpbL1umZrE^fcAx0{DA%-to* z*?HF&o(f0#dl1qkkZ6P{A(7XKjAY8&@-1yIj+2-f(=H46U zk*mJ0-9ikfqh?Bi4zAS70Y1A`Q~Cq9+r!D9{q4D!3<&x@<;CW%>*;X>AP!BT;c@)4 z#9QXO&qP-oxK&@~{g4XJTlO#dU~_SRqTq)sxgRW^a98lVyR+49+J8-*z4z0dV9uQs zAoj05Ni1Too2z|ierS!ybXcJjP8lkqdpF*v<6?C9g_3|?D&%e5pX2vG^94PV!JPLS zaiUM!u4J@~WWe8upnNg+L_k{Qji1V0rPLSepuOk5zw>$T$eN7L|Es)s<2o|jJ)syd z+X@K6Y2+p1=I6@;^P^?6tmWP6lX|4UpdM;Z$n9 zg9EgxM`hEZL12-@0%GjhRF$<8{`lE!D8uLxAm?rTl5?>Q4l>pW11>c$Bo^{ntOKAy z^fNsu+X-Pp2oYqler@+bW)Itr`+YTW`~I)=(6~CAmtQqJEO~#BFkdq zq*SI3iy`E;UYOhz9nNvOFBaEJZLKf0D<~MpulX&UV1gadq*;$J$l_gG)>|@@yev=-K^889u!G+h=%V^DW?%+4rE~q+r23Oz zI(l%L#7}tgWo}9Q*XF)n=1R6z!E!L9dsXB5oC8_0y&d3G+s^{S1;{vQr ztxcyN{2x4WKJ%H5^W#5Ee`aSWkden&!MaZObp8n_}rEeqTL)iG4Z05T@2NzQ-j>Q-CKX?jd_sw z{#@Y!=YQxRU0eBB0j65ve`+5t}a&;p}>kU_`CC+s=x`D+gt zfL$2V!&T$Iol2@x4dpk$q3tyC(#TqePc!glC{9lySF_ZvL|l?IGG&|jgfP9H72toZ zeYm{(URao(g{66$1i@P2gmIhm(qo)a{@ZR*|i#Bh@yQIkzJ4OZ-2y_PMV;0hhN zo%B1|Xk>4chJ9nPHtRI6{;ELjJH?}c2?3}509@_&?ghz>0CF(_{dVI3&5ipz!jlId zicbOQaCFE&p&hS0AZC3e*f?iWWY^#@&>m^sLWlJbOZ5Nmr6V8?3Cacc5bb9WA|iq$9YhNF zw_|5%*+3~9+xiXag^ncAj3uo2HEr5bfG|U&jQi#mgok0lL6a= z?6hH(h8gTmO2=40P59IFuX6$rdZZY9&S-xao&m|fRy-%dXFhMnyL79xiI+wn=!R-V zR+x5=)GzKD`<7tCVt9X>wpM91Kg^9PQb$|3#0SEeJf-6eJImb_2P$Q}TD!^oPi-QZ z0AzmjlF)T}-xMC9hQRhwC5xC2X4|s?@Mkq7jKVh7*g1xOMRzRvhwfszxq4Uc@z8e) zD^R{Rsw869Pi^q^zm9dwic2Ok%j!z6qYJFFHe{rq=*pS#Tn^6{8&qBw-{I3&?KdqZ zs`iFnSfTttJcUnA()f~V^Av3lQNhxhTCx5ePlU}9vBF-f{*_$dO1{qrRAHiHUR~AY!zka4;Te`&)Qm|s znRga8%f&v={4vICpzHwi07O$jiu~{V5nsO#Lv4Cp0nS7i3Sw9Nd-nu4(J1Sd9II?3 zW=pnNuK}0^xS=F3DI!*i2*VZoG9Hv+0R$t`FXezQhdN~pCxn5) zVkz2vrzPv1R6+~UMB+j-8uXpKV3gu`PsEyV$@};fZb3u3=%oS87nPFkFY>TfIP|%rtw3_36BXS9wC5UMkbwgs4%Tihfy*@bQ_7Lt50Yl2X8?GxZi>cUKOtZHYa@ z)>qY_)3+OMgjvcYc_N$NnX1lXW0pzQ(#@YgRVGd2_L2!4AeTQX%efya;OM#bsyl79 zyyS;}@(ZZtxEJw|7mpUS*%4TGTA-d2~4sssb z^vHZYxIr`~k4Q<;18AI~g3YU^3L|+Ei!QIUXJ%(iVM4c7)cH%__M5wzw)3Kf-D@9o zmH|7Lz8*G_5M8C|bcr~KJ!bBM^f!qJ3m5(cFE(uui$2xzUWJD!3qb&*JAF)I1_L9g z?a-d)08|n-T~mg>a#9Ij7Ejq2rA)Y^JhpMd0x!Oe&_tM46{Mu6Vj1dJ zgiAsx>inp8(a8Jkl4)F>WN^00yC2&Px%(V7!1T|S6Q^ekkG{Izs$UMlo?{r(iHTHf z%=4HYwbG!KQhT)LZOL-TOO0mRE8+SU13@j%>`4CtZsKZF z;DW1GN}jQ2CZ661$s%q%#NG^%2JGVfTe(2xT`>^GQ_8tzX942SL`RSFDwJH| zLyQ46t(K!)-EC4Z>8{5KwuYs5C#d0bY%j9M=4tDPhC5NgiODbXn@?Z^v0QJ5RI8k+ zY!i`W>{C(Tp?SE!v7cMVv`TS|Y^Tj#hetG&$V!#Xp}> z1JvHhKdOH{MZ-T@W$*c~dyM*F{)eAg6X0{|eRoAI{OcrZ4KRD~CjZ#q^<{n%=`gk< z!sak}iKSmzLtdx|#bQcf*chDcMNfx$t{3NYBnPg`72PO*#-$CHtWJT?F0QY&Gd$F_8o zYt5aMaZ)td&mwq_)*48YMc{qH_I{6%shh*RepO3M!4U+rF{EXKQ! z*h!`0suMkqGKB<= zsJ%(lrP@$bm`+z)S{8&dh21(M_sYw9apu2quauG*qofZ-PC!OKjq%6)n}ycMv(b3zq+?NU18+*f_A+zgGww4 zUVwZ+fW?Fyv%tq6I|Q2heP{us5+aN&rE_56VA^ie420i0XOloW5@mXCjhk@!OyL!u zeOJi`hl!`ld&oe|r_e})zyV&JVH0H)@U9>J8WjJ+k$Kf`8a+C5dSpwmOUI8SldrkCOaR~|ynrO=MN#qg%avCCM(9)8mo_ssz zS-LE8n=XQ|Ug2>60>n4)7n>z1Sj;-uf-ED-f^4E)!@i$t7yQo=N&XPUda;#nhf1A! zfK(d)u}hhVgk3M9q0-?2JrY{piiK=3Q`DrOfIZl^IV(>FC*#;>-v4nrs<*u8YU=tOggc+YMMxg$=d@!O7_vqh=3%tH~(} z@T_SP_@!VJ248%!8Kr-TVkrS`OM0ee>zK$o$$7TW%vs1M#|kk8Mtd^|`h*{1aeGg! z)#w7fZcXGrTy`6VHabvAwkKdGg(;_L#X8-xUts0|?giYZ&ZCu9l6yff7JK>&!kJuv zHy~j-*BlZbN?7ka&P5Ox3!(P;KXSM%EJQQNh;PT}BUXXYgI+EWI1jsL+~iTlzasrh z#+>XpJ&EEv*o&C{yaXc<Kk>3F-TQ!xkj)RoSzuiBU`R&{Y{4+eKxZ4LQ^1*tu~_ zn!P2ude>)Y#F1WpEue#xXbFiZ6J@ z@Mh$f_b9PoahunGcu1#gt9fzx= z`jdCA3^h|~gOC|?kRA)s53tr+9qOR@grx+GCsGWvBU)?GEJ%Wx-Zd3MZfmzinC7ke zIfH1E7VbGmcVxCj$1*vjzX(!VdSxa!CyQCekPkULg~EII7;k{`nk2%huw$E*vRJ@9 zHtZrJr~J6Wf{8mlEt&~FFNU22sj{IPen|&{6ppM{paQ((WNz}`c*y|u_Cx>!Jsqk^ zK>L4JTI{I-?TUcAq1wx{OnSkMy`LQESD)ICK&>OnM$#p`ia9)PJ<{bK<`n%wIK6Gequ}%M<%k_fdF`j!+Oo#@-g-Y@?fO}t zKX9A^jAHroKk7WqWRk(G%ke;|?+N4f?AD&d|3mMOApjEsy5V_3#Nxf+741au@9p2H zvuB#AA%aSB^96rE(23{=jm$|`?Th#OZ9bITf(vih9y4o+zg-F9fqN>q@SEp+ZARG* zQu+^tGW|8UGviWpm8=PdWvY0yddkw2)4DmW(DgFvnt#0hm|j~L0LAZgdj_pF_cd{lmUT<)3DMrqNPFU$ z%vI8Ly|7N1*OQy~A5Y$QEuOwN*$n_k+gh9LN4zZ|z?FYaV-v74^Y&R$FCit-=`mKD z`()_?k$MsI6Q0Pw|AFI>CX8LeXh~t1tbMMUDrt4RnPoM}d{QC$&I(U}Wm;f^ z*UA>B1E`3X-S=|jml>q|zctS<( zl0}{R6)(SC?R=%J_E{sMEe&P0Dw=93=Ix=nuuMky5r7@m9A+!J4B-d-x?{vCkm}rZ z%YxoNxHooh5VzzqZxrx5V212SL&*trT^0fBk9P5bVTQiCehLZfe6kZJvuHo7XXXT5 z^^1kJqb$j(;yZRMu$is4Oas130Pu7`07il)bY9G7Wi@xkMCwrrih>Z?&E2u=!R>7c z7>)-al;5Sny#z)q7D(nm67FJA{)W#V(vp+fQ6m%Btdm=+ie;A$Ru@L5#T`;ga|8u7kwr2pHTJ(|pb#q!1JH=!)MAv3D1{X@Tv>{A*Ocw@IvbRr zJ(`GsZfQ-kFVD52s9!KDXikaBXMZVR7%BtDApr4`SrYT4R?-1^VU+tVo1%Ie1@$SV zO;O~^O<$Qu{iC=CybOE*{8=Xaf1E;Wzx`c(hyNp=T?Yf&GXZBY08%cvlV7*Pu8k6~ zKrkyE@$?^i;Ak)Rvbq2j=hwE zxg*O~$E*yURk6-S7tlDqv1{c{k>8%0UaZM`d_KSKwa+%UkJsn9$6YHX2+-&%SOWSf z@)Z2b&H-({-nA^@*_Z`$o^NPYW3 zj$qkaXNHZjC1|mkYg);Z5rciFUM2`_!|(11IS|eV`Yg zBa6pwmAz}wFjEfUTysNTkgULI=c?-J6GlJN?Rw6>?`oC7S5zCdLy*)5%WXK${s${u zkZLbs=o37xd3ES@!Ty(9^?h&kPOpqxF1AQ|0KfH5%LC%NK(>*u1-nyIC2pS2$M1Q# zWTu1YgR-Jmo6IV^zMBCh^BsP?OgyplKRYwj>uTk($aOOe49;1tDp>+D(c=qbzWlQv zbIO7zH@}%W)#8Sm;@-fX$Vq)>@vz8CB_V^AqrMKAaYlN3X{BQbvMsJP7GwYr<0xj0 zBr1n(bn)-Mop4vznidjM7xHiX0p%!wFM|5Or9*&DHv9MV>UmTqF+Z_fRv}adI(ud}H0A zz>W0{aH>|J>qdeBx=uh;uplE1f2UMuj@x8&r3WZ6&a_JqgAN1?31Kx&!v_~ON^B#v zbV`P?WGzi5Bwux+EhvlXzsPrW=d&MU@R~cq&dxr_xy0pBf2p!f+9SPKHcBBhWN^R9 zy}TX#i<}Q`SqSLh-*ypvaOf?-a)Xsl9z)@CnLO!SfL6o8J8jG=IHX*&YLhE-*!3OU zf4&}bnV)9Tt28|flwA2Z^4#t#I=mOsFqs#5;urJu$XDI34nNLjXMzErsHCXUZNJjBm z6Dq&hgS_GPP^b&u(V6##^|BYbp*!sb?`_{}zr%Q(+r7&40DOdf=i?FpOzGoa0H5Xp zsA~X@M}Y3beg03Uawvd;8%70Q{6AYv9r|l&|C`Am;0@>FnH|mc4%|(PWHBab1;4O zHdS+QJNyA+WhFvr8P2V-zpAUjxs`66^@xi$soeE&jOZ1Qr>g*U1k@sb2Qie`6ZSo{Rw#y@}4woSOu6% z!~YTGY*#)2Ge?fsfa8u`Iap0Lf3rx?2V%G&Shq983ntO~Apt*x+J(63X%Vt9LQ1O9h0{mXVmHF`)(q07E+SR`O+^XZ90UXBzHR43tWm+D- zKsVpWj`#I~)8olLBWZQHgn zv2EMQ#I|isY}-!W_vG8PckT1zRGmMoy1ILHcXh4qh39^*8#6AF;@Of*GHpbXFlU~E z#6ZhPjC%4XOw!AcCpH3P8HyJ$U&a!9D|JJI?UAHI=3tvNGAo*Q zw}sSCz(b;KB_?CUt(F=lGWm?Kjgb$_`5db>IeV9SbSafFxSW=;fs;!>Qt&VNHtto% zA@~?8FS%c2S5)ZFy!gtJAZZ#&a-^{nWldvYb~aQU=7wuD+MI&(GR+ zUS|Pd@A{s=`D$cIFDBk@oVVZR$HBJ1gKy=dpFZ8=a<1hGaHQo5*xB50btQ0o&p8X^ zk@~}4e*@paZvY|^pVqzWP`kf*pd`nHq|qS~#!Y!B^828%Tw1Yi95o=tx(;a#Ogg*{wquxboRj!OHIEWsi<~>mXg^y**?gU>81uR{ zko(st`F9SL6-t!8H4`1w^jnaKXRg~pxj{Ojs6de-V^|(ac0IYVM?`!kP6sz^E$gIC z;J?BB^sG?W zsdY{Fi!3kNf5$gv|FHD@Q4TZNpB*mc?sDnN4CAr$NatYH$XLz&u!mtyYL_-PXsTMj z_4x})E_cj~zmHax&vMXn&;%%kr#mxLJGmb@2-QH4D9_<8#+{`nj3k=#1Tz zrfo14(nBy?d<*;yNB(#b&%^02KU<;$faQ06x1H{g7NVksVg+5}nIlk1wp^8>g;sO< z`Z7cY{1pMjQEWd11hDvk=T3&-;#vKnlBy2)#)=pslXRu)ruWzQOeBmDD-dH7Nr?ut zR2k<~mqYs5NN`$NrVm%DEt^Wo7Xs=RGX6QwkOzjwEjX7g{=;{OMW-3lL;eH}h9MJF zjdvnx-E`j!pRM#$$;0u=Qq93EQFEG0lr0iH0?25!5PYGwP|!2EdD~ov0z(`@{U&Z9 z6kKED_rDYxi_nLml+s4hpg3o%QWpA`d{D|0l+omTFUJ(Yu;kxikcnmQ%;oV06kDm{)Dpeh62g)om$l@=ixKf`N`5$mYs0}^KYBR;D5jn z2B!Ao7mHM7v*1Z^bk6Y(Gwis?ujTb$f`xi^1Plcp8#0X#R1pHCJ4osps0n{$8mTUx z5A4{8r&`=EiAyNk%q}Tr@T^>dz1ZG(J`R>Nz7facg=)qQdk2Z!8jJ7% zF@97s4fQ`VM{Y@0gnC|ngSOzcbSV$L%BvK_l5Uk;c@_epuGpOy6l zrjK+zu}RJpuXE;`iPke`jr237_H|Qr$UX{z*`V;+gPv z9>!VEmBCII7@A4}f;aebZt`f{)(AIQ?zD|U@y2F?URYmr-J}M6u}nXklR{43HHNsP z0{bYQOoWWg^Qip2gwDC>-A01~vK1K|{Uu33!lUr&nQ_?9+pNA^i{{Ja^r7+sY%R(;J*=m5-vAn!3&RZieFvf1Mp8$S^S{5FEx;RmyTa^agf7h3Xv){&^5(0; z*xOm_6G;6g49Wdc-Dt-G@KUWCQH|JITG|TYdsN54kpo0`Kr%BWuGQ%LFwH?GkQ(SZ zEQh!N`p8|J+Wq^B)!ym_>O<#9r*Ge|AKd@|n0yJqKKEW=<9mE&?YuY%JihlKd&|>) zeNo96^Mc7w1NrY_S3nu;G~|!o>B;}A$ouf4-1j?|P|zoa&Nc$}_B1qGebYs2JwLvs z7IJTS?ALinAm-?7%Y+UB2AKXJ7bA}U^dS1NOF)TZVZ9uj0SGmP@`o6h1_f`T1T||n zWzg0wzonl`U_h2)^g*Sn{EFjgmaZSqN%<6YTy;@V+P{^^M$vL%8WM>~%{hlMm%&eS zk`dB!u253jozy7zl_&0r>Ra;i8HJge;Cg0B!Geh!?^ zVJ3b($&LJ;UCedlq1A10sOAvei}I*#sDbI7&*EvEVevii#r;ofGTpWML;f1{39aeM z5Cu^KytD>$j-R`Mgq)7X(5F-PSn&=}%W#EDukLx<0>MW=N$M1589Cw!I5`E(%!+*O zc;0<$%P9c%TmLoUM+3++`RV+)n{LJ~5;MS7XHDNv~7c4gy z`e61rumD@@J36f1fHk%?wjKa`hPW(X72!qaU7&lejIv2E7%#6aRKFP9CFC#dr@VEc zTTn87lmDWQ+%bgy+Zsj|R(~C3{~!~cnpeaN0_c%|pSXS}SnP8kk$GZ3_QL||BL{MK zy9R@1Yny`%5P%vtORd~Ow+9TNINK?Pl-!#kZ#q+PVx5bmJmXl4Vpwx(%7puscpn#h#WjXH0ET}a9NMe@dAZ;Lg`EzP?Am#$SRr@ z7I9v9?iEB zwQ3hKRV=5;#l|j9Cyrk~WEi8767RAg;&|vm^i_G72_sl2Fn**sm}s$qI3Eoz9r@gN z@)JI;rzE}jQQMn$7qO$k)Udb&)%3WnwuhEI?b#v2yYIbNs4G2H{SA`WSM_S&9nih? zz*3|B>~X{LX~Y8m6j?P-CQf40OQWZ&^4ByZt2kz*E;Ge^JFN!x;kVTB+sKQW?VE4U-FX_zsO&k zm)HAIEVao75aUxhoZ+*^?sYdbNP(`5-EzqAj!}3OiH{hC9okmVUU=9HGqDA=h*>z) zelt}yD{v>E@0xW7eh5j<*6e^Gx6VL+9irTz=fJ{k-XX1zoZpqG(@0d!-g02*Xg%?)*XKQMf!JVB!o^Yhew}lYsg7qiPEhkpYxNW*=+SWw3e*Yb; zbu~e~?QJjN8?H90mC6er_zASX+2~vsOYGU{eM9G)%Jr4e({BS`b%l;*Cco1GgEKkV z`Z*42*ldf?aF}9(op`&oqrCj0Hi^YBV&F74{>s_MF2yV{g#NOCo4By5Pn zRn3{f9fjs=zlZ+(lG6}c3EgQKZ?BA3%ro#Cc2LXJKq$*D{O#C@U^d}tcX=hOFqBo3K>8qynC1vDu zxkfEV1Qs*%u7oMpS_lhG0aQd$3&LR+Nd2aZ#}=A@_VcfmBDD@_3q;Al5brDE4yV1w z)MBz^^ToGy909O<-i<-;psQ!SResdR>g7^U8kaOS&l=;xtui47NtkBh{ftcR2v7Ep zt$NT(wVJ=xguRYzMuO`B>C*2?O6Q-+T|&@1ZZ|YN3`pIEOd(0*apl=wHes zkA!p_3_jtmNEl+>9$@JifI`Czj4Nw0g*k1b546T+`6=OOASL&-6f!2~dE9tx;BK>* zjhJk!m9ZN-^d_R6TJwm6r8O9d0^*JVO|3|5!# zRZQls1fu|f3CP#TZ?geyNms0kBpaj+IA<#i?c0ybu0TK=B()}gcC1mV{1TI1MQ!~2 zHw<_3gk8m!8HMjtX%oaRv8DH!VgpP9RFC~$x)Rpf-YA@IO3ukM1q;*0LrslF{9FsGcAm|x=9U1dOG>9rK;A-Ae) z9Vx~Oo|O5SPr0Gq)uW7)Bux%NNX?Y&I{yK6P=v1~fK4_;!JA^1>6({pV>G2IYKfo# zpy-ZWe)Nb~lLy`+xt^-H60m6LE*O@p2xpeedLeicl6O#pH6YQ=U!92gIRt$FHL`1U zx6*!(IlO%Z^jPKR5#V`0yS;i_^NU52f67o!^Zz?22KzXmq$d1`7P^+Fr2xRT$wCMm z3R|7KOf6;;;{CelTbzHq;7H_m@2767XmW1M@Z2f>9ed>ULs#4O*!(o4k*%h;$+9Mw z;P^;U2D8(gbO6(>ebdCY-eGsErqi?fmD(9cDL~&x9}fG&2bziKtUgT;f~Os2vQ3|V zgli<}#jSs2Z1R&O%wj27?Y0~G2t%>5Zbq*%yp7i}b9XRA^IJHfE?V!E<43y>QT;kh zEXB%rzAzJjIk=i2pr*1(+S6nyqo;-97C49TkH-0Oejn?qTyXhMijRifh0RkDK6uoG zO=9FfUXji!5ZS8`Cs)nTZQP=bN-luLc*DpL12qr{QV@hm|jEJ_+)C-h}Ua^A_xcS+5=> z(V~9Fm(N7`6t48E8M$W*-nw~MPg%$AMr$xQ{fG{AEM=^E9`2e9KL(S5%F&#}wkHcE zbWnKa3`luny2?#orP7+Bn;(bVVJHAXb?;X-*H!We_**94l@&)&LNM{YsI#wuQ75a=$axHl*|{2&@=zrjdf7rH2X^|X4( zb;AvuSYbJ2|MiH2I^A^n4G>l4D{L>l1_3Phj4@SQ1SgQxgl~r%Csyc=AAc~(uvIaC zK;jVI`)1aEdXaJJqe}RRw`~se7(9irk#%qu1yr3%FxM0kzlHCQxYY|rJ8=ibSQO9e z)e@E7j=-^0OrHtc4eRhoeShO-#1B6eS@Sh($A<&4gF`5tqeHhjJb^PfrolA@pq-o} z#gih9NEJr0k{j5)kZZd#2$I_F#~MdqS|oavr@;8V#sXf4M?`D_>r03o0mBnh`R}I< z#i4<^<9w795gNzt+l~pJb-K1}K_}S&@gq+=h!(V$>y%`gkPxYuUC_m3iS}d@1a-0q z$UXa%ERsU3ohnckvXg|d40EE!0go4MJW;tRIh4|y06i+xrZuH^ZI*fYCYnumVwj7n z7T)NqN;8Y3DEx|b<|zKNFS^E61DT^exL`;VSnpQHrp;r66A_ukH_}z1uPoCxVpg51 zsU)yiIP*h)MWFbbZY-_1;e>8#rLnvYX2afya?}#iS*IzND&&~sfUk?SE=l-zZbu(Qux(J-4vshmEaE2q{2F0jBqY;%bj-Q zn78}=#^h?RZ6c9;-1a}54LGk>3}@e(Ls`eR9JI`T2UQq3>^TGk`0VY4VqHwhV~G** zZd6REP5hoWtPME(ttDZSUcx^O6fmT3*!bP5d>JyX0r&Xn8W7Zied((oT`~(6@$S^k z(EO^B@(3xp2ySh*gMINmA>27MeII<1g z??S@;vARnqQvHU9l;!^x+%q9nsN8anI3n5X4V%%T$!h3NIx5+F-)s81$XXA;&p2Dr zuEwr$X1*D6S>i93HUso~GXw0$H? zO(k9X%#}mYmE5j<%7Echim#=5SpDmPW_kgv($q#Q(3-k&{R(X{v#Na)-wFhAm3$Qm zwSQ`ni?>YmnxYihv^4@@~=b{;X4pu zksT#E^sq~fbPHpo^e>*37#p6m?jr|DlcI|vNnKQ@D!AO8o|jCKNtbc2aYp>%Nsq77 zs=VfF#O2q&_<@%|st5Ps3b3dN7GO!1J)Der2z#>GII0E)CsrkH~f%KYe zw}4@RJ;!)0JTZXqI-Rk-R0`lugrWo1UA4fKcd%RjtU3?8C%kQQQuO-GSPlJ*r1wtr z@oLX3#6?a(`16j5GiO&jbn#6+qExx?Y%H=DH8XYuN183?lQC zxC_nAodjSdJ{_Z1CO!4xf#!CWU2l!ce{g-#iOB!nl?=^&O#L^EFm0EM!b1)wx6$Jk zKdfPp8t~NbOz!u}-NwbuMTo^>j(gxO+>~u8nLfL3PIh~V&67i#OXlTBNirG<0CL0y4Y-p%n-Ryr4 z&-@C|QZ(APIQ%}L=U;H@f2#anwg11Hu_KrNb6x8Hx`lXNDk_@!{APjGy zj0}h1u~zLR?;}Ykf*!cjuH%ivENGIu1Lv-WrDI{9`SADgy?EZ^ltr7Vlpce9A;PC_ zLXjbxWA=#NLu>NT_=0@4>Y_r^UDK9BW-4;wBN%>EG zn81$ZM5P%u$+FY#Cdc%narTvI)s=S5(ma{@QEfbDt zk<1LSOfC!gZ37?b;uMDDH5b;MjOR06N!2smWx8IP6u%SuE}3^I>dQsP34GB7lq*QS zmY>72phe>pA^(o55f0jIn%|5saeRt6I!%9_5Un>g#!P$5{w&Jnh$b7&F~N*dWisqJ z7+R-&knQez@~Z6acOf{M9CQz;*D4`F0tlXo!1InLWMxHbU~T)+*{D0Cg9@4Da=1h# z9rYKq7Uu0n!%y*!XLs!9mYOHI>3z zl^zqVF?PEv-4M8FkJNP)X7n#|N#c|pcfdF6rz#%E#%SFBQ6DcJu!5LJ|4b%Eph15p z5o~F@*R6{mM(v)Fl0tK)VjuUR%9Zu_j*c%0r+pcASAr$15%rJl-{5td#;+lk;0cqj zh8!ZF^+Ae4F^k%S?7e7vVnCYru*fD*iiP$Qj>iZZv7>wB!tG#49se#Py&}qoh+%bq z(iWGHYA~lHJ@HePYSb^_MCi3Pt{C|3o^|vHe417Q>JL4{oB_)}qw)`0qkjGPRM7&J zq7}4+psEHb!N_j{OIGt=fK~Y4ojd1Aoj~fI3HUX=`&sla;M;pgHL%vU)-L%S zNSaIi-phZ-N(0D$lGhYbwtv;8AKK~R_E#Y$F{15(WbcNsdS~=!<1hiKD+8f;^?Ly| z?Ol|5N&1mWbQmtw)$Hw`S|lt0{~aLYgtDXS62*+gC6D z9v5yO?qEv8hmgFsGEsg=Ow$efT7?m4dXUd< z^E)<$aM*^1AOxg`=Ajn+LrzM$7#9^+nbZY20aa+*f6B)Ma~%G)dFL4eu>Spf7!5kN z>Rh&zZ^=$aG~#|wc^eV#5@r-Q{)@pJv8=4uC=4dE)gcv3V+4lE1T`cKLihIteyg`H zDjMR`Un>L*Tzm!tK@Ubb>R6QrM*U zfFxuU^OG!^FQl~SFM|1Jn|`yY%HU-7a!p@tq={0ap7uJ&!HF$uqo8KE@PR6Hg#_Fb z!?jWXm7SXfe*YW#Y^Cz90mEvIHv^jOWXBTml3fWPTyJ__XUO3_fe%LSk( zl+eHD3PRF{Re$XlXqRs<72idS$Zs7S4hQ@ZN^>#J8$QyKt0hVe7(30=3YQ)Ek{5+r zCZ#VvR|}{dnA^K%@Z)pMF}fMfLh^EvM?nd{cjEy)3HB6khp)RB%oXjdhxWqxbJFN1*UyKa z9O(U7tNM9YC8qQ=FD5lU)(nk)l|S8qFYJfFnCWjv2(@h>{o&i-IFM$tC`GkDfn&Y| z*J0N}SKu`DT&Uh_*W1|&Ji9Nh3NyJwumbM?F8aXo#_#-E!&N+x5_UXF$AQ)xsb7A! z-oCEg$v~_-&LcnO8)u2nH&fQ-u^qdDqd&et(W>PqA#A${I)35GX5}R(>cz2<(lo^i z(dtX)5XN=h?&Jyk7Doe01Ha(+3Yl~;1bD<|AGO}wCVSw;*h-f5+IgbXO4;GLvdq8z zi7nlD?45-k%Gr(PuKGO9GAuI z{?8K5Y+*a>j2|$7uBCPB-?99n>1r3Z1lq<2UuxF8o-tn!S$f7a%9wy1@~v|miJ;zL zY782T&kYyUuj0pQ`TCuXN04u6;L;cca%IhezqEhi9Hp$)8NHCzSFcXyd7Eos?^jETla-C*gQYh`8s)wXw6tigt1B6 z6##wqX=zvLVgg4@MT^)Ja%k?g@|TX{VwYp%DgXLpME-*5T+{HK%V6cp4c$OcCT$y z!@}msRB8bh@g^PkVUhuB1$Jh>n^g&LRyeno3|Mq)|846&Ry(y{t>$jLGa+Ji3T@l^ z`Rpy1>LvVk<#?W#Pu3LW0)(G_f$X#?^`@sEei*sFbqPQ5+?+%-aTq1peEvRH$9Co z3$q6ilk&cRx}EWRix-SxxT$)mQ-%aKLp3BV=fDO8RE&2U{sA1@Q3^EB4^P*?bC^ji zp*UH{)p!U)1sh)6;Zh{r0Z8bm2qlR>Y#hDQgr`Dwd&Z>p`}V+Yf`xZww+dGZavZr= za~^DJoAr+bcX|k#F#pT=|<463L-YiB#y)ppyd%;Bw7WxSRGhX}GWSQVNfcbl=V$zP!QY^b0a0 zKm(2X@krL^hi7o53A&Pox+0y^ zxjh`IfzzK(ndEg+Yqz5>(9gNxX~r58($c*R(MC;CFvDJ5a1EC`tAB*W z@7zuDo{0fB9E8StEW4pNPZV1q)F30{$7loMX{lB|?m&5|cecU^tW1Q*(E$11;i9Un zn@A1)uc!}mbwd40HO#U_sq=eOk1XqL@CTD4bJDDtYT~z~ozFNNk&pa$U^06n23V=7Gb#>E#r@w3;Q&Q2-yJAt6H$)0o{j zOiP^gemeX0XdS4?Xner$e(S475TCqsar75*F9H+$ku)=;i&OpkT&N`|5NZeH;w>h* zJqb>^{XhE%%S4W{z#2@)S z862P0Hw(#_w!)#Fc5)VWL!th11L;%!M7k4Z0R5NUyM0OykazGWI)=}qPfeKzfeVT! zX1>NaR|6_NU8wsJb5S+wpk0c02hWgU`%DvH8jN> zcG$JQI81I-T1y$3&3WG2SR6dk9RNa9qcRQbFN~sqD>Bv?%jb#!vJQc973`Z9XRf`u zC5fH$GP`TjquZiq&*jr5ogL%PPME4f zc_#QHtd*Kd(jw{`!D}6E_u7O9cKzeSV<42;WlN9Lq_D^YBLx49 z5{fu8r*TWSX!Hl;@^K|gyOXt9GmNz*+CZ__V~<)-Q=hqF)`KOwgADq^5V8U{ni<;k zER;gPP5LN|GyQDcCida^l21n&y>g7tyOIa9?~zQc@6jKT7|TeoqrOf^M`nUPeIa?8 zUA92ujXc3kcWPNgqs*R|#$Vg)e1v5|tzH-pD4!4A5p2Iev#X&0u^05l^__SxL^@6N zk$hC@7|6W~Ywf~6exbzl<^NbF_D6)WJkYzA$?Cy2x-rGWYLpvhuKJYcg~Erhh$wo= zws^aY*IChnMwg+sSO^~swoD&U#0=J;0Sm5B#1FMd9~ZQT+#W~%bK9%14{qno-8C>F zl_YYoM$a|EnPCyS3{U`KOc(Y+8Uh3U? z7P#23Jn|BZgZ{^`hW$qF&mS&X%SNAe%6GqMihZoAVCBc&=4AvP;Nrh$F;8G){Ak-X zy$Y!Q{ZnmyY@@Jdxic{~m^28&zr-2PThykJI)$~V$q|;-1__pxHrPX_m6y2XBs%O4 zrc04DJKnnEkEOrL0}d@LNz|P*D{Y0)N3N|Qob|+u88P)c3vz7r6=0OSa$KLKy8)4* zm>I7xxTC(zw0UzccR%>}Cr`9J2}gjIV5LcxBYo7Le#XYEVL+fyRWwk0%$RifcZ<&S zrn%A521l3hQw6su`Y&yTRQ7IAvbbgdgn0D~4mtu9MKv!s8D2>l9=CauaVAf{-TF55 z<<~tN3FrfE_2wbS5x>;_9u=AmAw9!N08|?J9cR^W_d3P)nG+G11>$*7gToKWq6o_H z&*vP-;7G_wBI(ItE>#4t9mkDkK_1Kap_bPR*1-L+2p zD34<+DP=OQ$H*;Tp4D*r5b3C?9B(5spCEokZ8}SP>1Ew{tG3u5ek&l9t;M7y_+Q@(o1nOX52B%LctiZ* z@r0ZpByPf(XsHKj{y$?nqOsHu!*QMOK1pI4UGR_H=$gbXeBO~9L8;^bzk zwQ~(`KAYYL7}ln(x#-JsP?xL?oD|#>&91S2L({)St{?5b-=g66t|33|v4hl8#B?4x zSG|h5)n}8*V0mH|x$(?o>C9q3>tY!e7Rohx2Q_Wc=skCVHGC!-)TB)a;FPA)7%G%uCKjK9B9)IAvo@ChFjc>aI zZGG8V6;}Shqzn>kh*?%uS|cAM#x+01J!^W}^S!v*7NN}shs$!hz)M#XRTPcUF<_b$ zT}%bMrcm~X`Y}6J2Tu0l4SxMTc2Y05cCGrDE_^qQ_-NT9fyJ>%l68utR#F-Ob4eXP z;v5t)hE0=ED@m0gH_=$tiQg&Xu{>sorqzB1*uvk_%s@6t@7iIFgu?D|mUKIgef~~C z;>L+dQp{FLHKrgKI+zpx1p(S^?x}NeLFRUU(rt!v01&1T*3a~SgM!?khD}0|2nVwR z6khXt{#kOVq!U1rzc*ffSHb!7Xm*?SQ|_jyIqc1Yki9jo+B0&Bf4vJk%F)Uw4~#;S z@)ordYiwHQk(K5a0#u243f+3~n9D$q54L&f`i+0cr>+MI|6gK7Z5O2(Ey@K%0tnoa zodVOtIy3hRP-$%8a+Td3naA!T~z&Kw>WTq-ELEG zN}H#D&7SvtqMaQ6O^g?GnFihnVFrFjmf39UvqQ+g2Sq)rV&GZB>k;*Rtt4_x!sS%r zsXEc|e99^=tRPT!p8Eq$^}p2}N_0Lmv4+<`axhRP7n5_Jx-=WNj&Zc!&^Jam-vt2A z&YMrdr->_hULUMq06zkkKMw%&>Lno7L;89tf34Ew5RL%R&|OMF?u-fU*jawpy`T49 z`gQi5Y^93q)kSxy%|NwK`lh%ED?5_XI0mfT4A*P=V;t1rhoRb#QasdI_U}E5 z%~=3sbd|W2l|4i!=CkO4-k#h};D$#}i`qRMpn%>Y-O4DAgkies$!m)Td58!G z8H#jgvNV9|Tlok@*5=JH26d3(2C)BIt9=4Ie>b!I?hTTHyxD@@W?>!R1dVxcA=eNA zJDMpv^BZlW*Ya*v4)sq5XY(6Jx-d)z!)+KuNDUFK;b-kryA0Yn4>KE$gGov5qvjJK z>jO%=II9e@Y*1}^Nm01MlW8hOToJx$@9Kf{ZgqvplmS?fdB}etV>Q8kkix$>OCg_I z@t?>492Qm*L4y?IL>$EL4@C3`|D4{XCPGv#$i3YDDZuiuFOiLMIU-IAW1s{hYnhDW zKGa~PEMss1%IilE1y4HU^um094{tQ0#F@-@5eU!c2a1KH@M9JBc_Eqf9s{NUoze96 znj#jzwa%kpBqw~$ofG8K;*dgfFZ?fDz1^wr`_LI#W5rQUeG9%9{2JW}-WX6}#E<^4 zK4HQ2N#}HZsuRM8{;50XZlPvpZ7oOOygnnMAJ&s-X?zcwYgro&;n+Rh%g4L|f>Vlq zLGpYYzc`tfLR7ICzL}atpOfp3$Y$XipBTsy!+7z z3xc0xoU!GW?Fu}ofj=s|*&kKgwQpy^=k1lHlZC?#hR_;WD#hjbsXH(jo zOCN3J*xv~($66?+{*%iGI5)b#ROXJK(aV`H#yW90a0q{!gqsTUB-)l0x^W5iZjtC@XI@LWT z4t0j;Q4hfU@XAXP!&WRA=hXio@FaR&?NQ{SV}uV0$Y@!?(bfxjx+}@5OY4$(7!d#Q;AiJTci&)FX*eMu5hL>gqwpnm$K@!)H;^{XU*(d}` z-y#PO(A-IXOUuwMuEJ?Dt|G-$U&q%o+)S@Ae8jgqjhr{(M!TJ1vE<2+d}wMR_^s1; zy`Slk^bNc@detU}yeLi4j~{^ze2QiPei@lS)9;a9b9;~8IuPsrGvQYM^;~Hc6bUTY@vu4* z-PXGH5~m+O+@_D$zR1aj;A|l*HPAGkZ zD}$Dg{5wb2zLKotib(I_P}K6nT(luef82yO`Lh{@=! zp1QbmFx(X3^x#xQfB|Cwa*T^NNiijOyKF-%75t08l-0;))}{pZX3WH37qJmnKEv;hflI|*|C@&paA8sg?lE=FdkucFZH<22T9EyNG$WkDTHTR{pSwAax>$ogxu%FL)7RkpS^Y5YCk-uW6{Z ze&U|~xIy9$D+4ci6+!Xr^R)b}g(1?LJQ!(`5IENOZ25u3DF}d31YILYj|QQf@?m6P zRs>AL(_#hMODb^K!OQ_Q;~3c6Yt2HiS2F5RUVUKC&uacGGp=xF?q>V1;7Zt~^yh%tI1dGsfFk z1VDuds~#%Bz>33*=6zzCZGa=(lA-A#at4d{8x~hFjbQVpaMxW}+|j*m|N6J#Ozt?L zg`SJGnEdf3Lb0ajA;mXX*Exmrwv$y;B!Eawmq0h;bxozBkJFJznlv39Xue^0eSyTi z3~04I@zdN|r+N79C^KeJ)$+7?efEcD-ymabd|5C5?X%5&MtYY{&9?A0O+EY6+RR>` zeHv5zX(?Nm!sRj*oiMg3Es-RQ7j{bR>=dxMKS&(&i-#XO65&%*@DA0eEi2~|w=r!;6<_hfi=uH5lJW62&r)aJR z>eK5k)pY=$8c&_clu*pFJ0oj&H<^TSi~Sp%Noom?-%(X!7hY58Pfp(fN8-;FG}qi5 z&6l#cqy$T!qb$eRcQ{_O8$T~!B*19(+Y3Kh=`C>iO6PO*{M{`A*cLC&B_Ct)Sb4+j zXJ{Gr272vmfKv=e37LL9cb$Z;LC%%jrt(M&PPGKhvFGl2s)`sbw?Uh#XsO`UMhKs7XG@ldsR zjZ@y@m)s{off9)p2l3!{1YdGyZszR#j}Y8$2XnX6h?&Cyz*;70qqH%qQ|iZ|$+~q% zL}^%SEA)n_al-$YSbC&Xh=mcIc z7q~i*Qkf_b-Mf||%Yj@*dT;cgSWJrD_+_I?mhf-gv`-yBxWF(0Lr~BVo=hQ(3#HEY zV;}S8$iz@z?a#uIptA8Yd=g=oEP7Qi11)3mAwJ>3T9<^~ct2&DvBbF8tu^V6v683} zjIM_#>_pz?ZYgol=_I+|JE1V)UtflYA;g03h%NLsq(x`Eeii76(dMPiMak)x*3mjh zho{l0nkDJ%`T?GC0M71;7>qdC`bj!{cJCYJ0@wdc{ndA^A<%HW=$fqGxbuIpX&%>J ztKAa0JLm@ZGIE@bfy!+7o8hP6=3#J_xMjW-mc>eUcFpPBOFpklC~Firq!p&tOj(!W z>wjQp{M21+OCpWC`!#bh{x@g{KO?HF++)AKTUWeb^H71x_4s?`t zNiP;1h$VM@+|y9iN{-*?ro3s=u*HcoN66A8Wi!kVPHX0g)Q2gf>LI=AcB`92d5$TR zH+QFqst?6q$LwAMWq3ZQRYtcA+v(64o3>TS2j~iJU08bg%}<8oozyY&!x$Mjyj&27 zTzLzt2A)DogEvQlYc%Q`ZD9H{T}M{+>>c$jdxI(T#zHG7l3HVfjCrRn_;N-PIx*Nx zQm~d9)WlFU+8WAKl_vx*_Izr@-C}mHJwE=tDV7mhh3s$yd8LW#c6KOXZ z-9W~4HJOhis?hi_}M zS2fA zMLq`D-eR@p_phZTFYP%mgqH>ohbaDWccY{pbeWcRcO&+Ws5S(8nWFNX2DSyDKJ=A-)>rZ(J|SJkK_E2WBN2cZ1^reIaEHZ zK3XEfL4V@cQJJ(#RMAr_A zMJBeBSj9Pp!#p$H=rABc!!h9p9iknMS%0K9NacnxSu=*k8XR{psUB@b;SQa%9*b})As-7^DR66r_BGmpvT((<7^;ID;Ql@pwJnI1jp3W zYkH<62LnHpmr<`-RLJa`r{HvQRbA}JJZouNWmTn>JIl8&5>3MYcq~>h&Hl5xVekK~ z=OzBfVjgv^Vg}Pr2jb9=ObygS{fHrBRp-g)tS*21qhp1*Fd3>-!wHLWk`&+%*qKY_ zOKehg$17JS-f%fc@k{}(slZ>$mTe#^Tc&o`EIPjWrukO+JkC?-|MiGs;57MfW9_+} z|8sMzl>Zj;nDU?P+GY84eI}>l%Ul`$lV0o>I*gNByCnJ)YOnM!xKoi`n*UsKtEYN$ z`+uAT;Ug=7Q}@3e|GT!izFyjY7Vi*B!f3~;RO8@VLJaamC>o`xfAuf-5x+-gH>pt$v#qP=WqAgj$ zq$jukm1%2X=l|AvPW~_B{}=S=hqJnm0B40`u@ENvr&P(=2~8o}%1a(O04KQk4N_ao zjVSU^7|J&T$D&_x$JQ9)Oir&^Rpp&2H5@%W96QCWq)q(ikl%?|# z1&JT@Ff=@a!0A3soBWft`s55>92Ooh7MRx;%L;4dD)V^Nl35@hS zQfV4@0}KU6qz0BY3L;z~6%I+5GrLN~>!_QXun8KfSF8lF3Vqs=TP5sRiD_qfA>ys;b%L}V_%xA4nvx=-hrGGe*ySBG z(n;kUWPFr;#V;$;P9WuJhL9nkSO6WulXnSqL_dOf^AH@|&lrcgWqCI_#sq`5;0fJ1 zuQtCQCGm(R*)91j7}Fhj51=J)1R?N{wL#nnVD4`635xu&k!Lo zW$Y#%8W$x6g14sz4`+TKVVQuco;>+N0EOf+W&Pk>;nXWsrbKJTQ>gZ>Uw$qzmR7h{Fhw5 z_KA=$rVald3@}y9g~wh|-{5sTqc?9T&%qEQ>Mz5a3iPGi9yZy=%<&&Zj`R=D|GKfZ zwwcTSx>4@`g*U+wOJSox32joAphgI~}TcV|S>T9&2V+?{-D6OaF6o zBoB(@;9}{CK+-hrmMDB?gCOxiM$2w7kt?RC4Lsd;IN|cMXfw?h3M@G#^l!C5QeR*$70n@P~@Q0PHrZ4tGtEg1iBXm25Y=pF8cgN8GilIM;C*S1$WQ$RRGp|K%Y@VT~P&DoBy<(f(8 zZL9VI!pv32nXz__lhR< zfM&gVob(%h+-(f9Vc1A|-G6NTbL0Dz;(=A$sBP4rlap6%0zZ>e_A|ks?~D^fj{iT$ zhvz4UuTBn6-!Nj3mt=XIL``U|$;Gx9y5D3w9YpCSAMiQ;v|PP6;W#M$AAxS`Zn~{c zpj)fmK0H00gKTWLoNCIHhsNdECF3G2BW(iCc;Z)kY2x)QU8+#K(*;6d&v>T6TDl*#0`$%JrNi_ogKnY3=Ik8BLmD$&5R*T&@ia6r} zi{k9Hs}If0Wm^6E8Ow&vbNxWaFq?rq{Yg6TppK^awnmm=!`8Z97%n%7jtvXPF{<1w zp%9xq$e)6H{W|9USDLz2w`z4%2<>C?p(IXIG8~6lFbXMw=2M=UhonFtWFv4VDExZx zM|1}>n!#VDHspmN)|hG;V6a9dEbEPR#|hp{=G#O6w&LdcVSMR@V9?Rpq3$g%!)=!p#$$ah?6E+PG~wF(q-}m{s}oEmYoMTn$PXy+ZMltF@E}4?UFv=I)aZE z?WiVQK|+RXR@4`Dh~qwNzqTy5L7)AE4*r!dhYyp}q=kG|Y9N1OI zOjdK`tQK~nD%aVbbD^zhxkH|66I!B87{cH25a@yeN;i(KDX6z9-(=k5J2s15J8PzW z_{cfOiw>|-IFQd|`!8IrJ~{sD#^&Z)4*zw##Q$H&!_R+&9Qq9tmEy4v|I`h!pQJ$W zDfS!J8y4Q1!i`gDz*&yBy{5`>JlZV?In-{wPrCy;^qS;T z{eNTs2(2SKY`}gz^n!@LIbdqo4*qetrs76T{evgc8-jKZ&n6?>1=%5cEcLnXY*)|BkIM@!Uk#J0l|ltJk@6Xu1c06 zT_ev;xy;7^#->(u3x6@}iKB5g8fWnHOm&)-7%l9oN;}bG)wv4}SXHtNq#fl3VJ;AJ z(YrFw>r=10lv-9cIbCX#Os__$qp2VdwCA*szN91#ESAWU{!Y%IWtwgB+Hj! k+`U3+JkV8Qm-MNmr&8W5pYkc6Kj8EK0chaV$N>5X07Jb8*8l(j literal 0 HcmV?d00001 diff --git a/ts-vercel-ai/auth0-ai-vercel-0.0.0.tgz b/ts-vercel-ai/auth0-ai-vercel-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e621162703ef406c02d247fabd91b04b843f5974 GIT binary patch literal 31210 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.2.0 <0.6.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", "langsmith": "^0.3.16", "uuid": "^10.0.0", "zod": "^3.22.3", "zod-to-json-schema": "^3.22.5" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", "@aws-sdk/client-bedrock-runtime": "^3.749.0", "@aws-sdk/client-dynamodb": "^3.749.0", "@aws-sdk/client-kendra": "^3.749.0", "@aws-sdk/client-lambda": "^3.749.0", "@aws-sdk/client-s3": "^3.749.0", "@aws-sdk/client-sagemaker-runtime": "^3.749.0", "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", "@huggingface/inference": "^2.6.4", "@huggingface/transformers": "^3.2.3", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.12.0", "@langchain/core": ">=0.2.21 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", "@mlc-ai/web-llm": "*", "@mozilla/readability": "*", "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", "@qdrant/js-client-rest": "^1.8.2", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", "@smithy/protocol-http": "^3.0.6", "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", "@upstash/vector": "^1.1.1", "@vercel/kv": "*", "@vercel/postgres": "*", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.28.0", "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", "cheerio": "^1.0.0-rc.12", "chromadb": "*", "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", "dria": "^0.0.3", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", "fast-xml-parser": "*", "firebase-admin": "^11.9.0 || ^12.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", "html-to-text": "^9.0.5", "ibm-cloud-sdk-core": "*", "ignore": "^5.2.0", "interface-datastore": "^8.2.11", "ioredis": "^5.3.2", "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", "mongodb": ">=5.2.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", "pdf-parse": "1.1.1", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", "pickleparser": "^0.2.1", "playwright": "^1.32.1", "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", "redis": "*", "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", "weaviate-ts-client": "*", "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", "youtubei.js": "*" }, "optionalPeers": ["@arcjet/redact", "@aws-crypto/sha256-js", "@aws-sdk/client-bedrock-agent-runtime", "@aws-sdk/client-bedrock-runtime", "@aws-sdk/client-dynamodb", "@aws-sdk/client-kendra", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sagemaker-runtime", "@aws-sdk/client-sfn", "@aws-sdk/credential-provider-node", "@azure/search-documents", "@azure/storage-blob", "@browserbasehq/sdk", "@clickhouse/client", "@cloudflare/ai", "@datastax/astra-db-ts", "@elastic/elasticsearch", "@getmetal/metal-sdk", "@getzep/zep-cloud", "@getzep/zep-js", "@gomomento/sdk", "@gomomento/sdk-core", "@google-ai/generativelanguage", "@google-cloud/storage", "@gradientai/nodejs-sdk", "@huggingface/inference", "@huggingface/transformers", "@lancedb/lancedb", "@layerup/layerup-security", "@libsql/client", "@mendable/firecrawl-js", "@mlc-ai/web-llm", "@mozilla/readability", "@neondatabase/serverless", "@notionhq/client", "@opensearch-project/opensearch", "@pinecone-database/pinecone", "@planetscale/database", "@premai/prem-sdk", "@qdrant/js-client-rest", "@raycast/api", "@rockset/client", "@smithy/eventstream-codec", "@smithy/protocol-http", "@smithy/signature-v4", "@smithy/util-utf8", "@spider-cloud/spider-client", "@supabase/supabase-js", "@tensorflow-models/universal-sentence-encoder", "@tensorflow/tfjs-converter", "@tensorflow/tfjs-core", "@upstash/ratelimit", "@upstash/redis", "@upstash/vector", "@vercel/kv", "@vercel/postgres", "@writerai/writer-sdk", "@xata.io/client", "@zilliz/milvus2-sdk-node", "apify-client", "assemblyai", "azion", "better-sqlite3", "cassandra-driver", "cborg", "cheerio", "chromadb", "closevector-common", "closevector-node", "closevector-web", "cohere-ai", "convex", "crypto-js", "d3-dsv", "discord.js", "dria", "duck-duck-scrape", "epub2", "fast-xml-parser", "firebase-admin", "google-auth-library", "googleapis", "hnswlib-node", "html-to-text", "ignore", "interface-datastore", "ioredis", "it-all", "jsdom", "jsonwebtoken", "llmonitor", "lodash", "lunary", "mammoth", "mariadb", "mem0ai", "mongodb", "mysql2", "neo4j-driver", "notion-to-md", "officeparser", "pdf-parse", "pg", "pg-copy-streams", "pickleparser", "playwright", "portkey-ai", "puppeteer", "pyodide", "redis", "replicate", "sonix-speech-recognition", "srt-parser-2", "typeorm", "typesense", "usearch", "voy-search", "weaviate-ts-client", "web-auth-library", "word-extractor", "ws", "youtubei.js"] }, "sha512-dTRoAy4XPalCB4Of5N4uQ8/KSGCddv48OGek8CULtdbBSkQ9s7iWtcb8hQEajkCwMfILVVzw1pU8IzE17oNHPA=="], + "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], + + "@langchain/community": ["@langchain/community@0.3.57", "", { "dependencies": { "@langchain/openai": ">=0.2.0 <0.7.0", "@langchain/weaviate": "^0.2.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", "langsmith": "^0.3.67", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", "@aws-sdk/client-bedrock-runtime": "^3.749.0", "@aws-sdk/client-dynamodb": "^3.749.0", "@aws-sdk/client-kendra": "^3.749.0", "@aws-sdk/client-lambda": "^3.749.0", "@aws-sdk/client-s3": "^3.749.0", "@aws-sdk/client-sagemaker-runtime": "^3.749.0", "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", "@huggingface/inference": "^4.0.5", "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.19.1", "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", "@mlc-ai/web-llm": "*", "@mozilla/readability": "*", "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", "@qdrant/js-client-rest": "^1.15.0", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", "@smithy/protocol-http": "^3.0.6", "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", "@upstash/vector": "^1.1.1", "@vercel/kv": "*", "@vercel/postgres": "*", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.28.0", "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", "cheerio": "^1.0.0-rc.12", "chromadb": "*", "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", "fast-xml-parser": "*", "firebase-admin": "^11.9.0 || ^12.0.0 || ^13.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", "html-to-text": "^9.0.5", "ibm-cloud-sdk-core": "*", "ignore": "^5.2.0", "interface-datastore": "^8.2.11", "ioredis": "^5.3.2", "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", "pdf-parse": "1.1.1", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", "pickleparser": "^0.2.1", "playwright": "^1.32.1", "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", "redis": "*", "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", "weaviate-client": "^3.5.2", "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", "youtubei.js": "*" }, "optionalPeers": ["@arcjet/redact", "@aws-crypto/sha256-js", "@aws-sdk/client-bedrock-agent-runtime", "@aws-sdk/client-bedrock-runtime", "@aws-sdk/client-dynamodb", "@aws-sdk/client-kendra", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sagemaker-runtime", "@aws-sdk/client-sfn", "@aws-sdk/credential-provider-node", "@azure/search-documents", "@azure/storage-blob", "@browserbasehq/sdk", "@clickhouse/client", "@cloudflare/ai", "@datastax/astra-db-ts", "@elastic/elasticsearch", "@getmetal/metal-sdk", "@getzep/zep-cloud", "@getzep/zep-js", "@gomomento/sdk", "@gomomento/sdk-core", "@google-ai/generativelanguage", "@google-cloud/storage", "@gradientai/nodejs-sdk", "@huggingface/inference", "@huggingface/transformers", "@lancedb/lancedb", "@layerup/layerup-security", "@libsql/client", "@mendable/firecrawl-js", "@mlc-ai/web-llm", "@mozilla/readability", "@neondatabase/serverless", "@notionhq/client", "@opensearch-project/opensearch", "@pinecone-database/pinecone", "@planetscale/database", "@premai/prem-sdk", "@qdrant/js-client-rest", "@raycast/api", "@rockset/client", "@smithy/eventstream-codec", "@smithy/protocol-http", "@smithy/signature-v4", "@smithy/util-utf8", "@spider-cloud/spider-client", "@supabase/supabase-js", "@tensorflow-models/universal-sentence-encoder", "@tensorflow/tfjs-converter", "@tensorflow/tfjs-core", "@upstash/ratelimit", "@upstash/redis", "@upstash/vector", "@vercel/kv", "@vercel/postgres", "@writerai/writer-sdk", "@xata.io/client", "@zilliz/milvus2-sdk-node", "apify-client", "assemblyai", "azion", "better-sqlite3", "cassandra-driver", "cborg", "cheerio", "chromadb", "closevector-common", "closevector-node", "closevector-web", "cohere-ai", "convex", "crypto-js", "d3-dsv", "discord.js", "duck-duck-scrape", "epub2", "fast-xml-parser", "firebase-admin", "google-auth-library", "googleapis", "hnswlib-node", "html-to-text", "ignore", "interface-datastore", "ioredis", "it-all", "jsdom", "jsonwebtoken", "llmonitor", "lodash", "lunary", "mammoth", "mariadb", "mem0ai", "mongodb", "mysql2", "neo4j-driver", "notion-to-md", "officeparser", "pdf-parse", "pg", "pg-copy-streams", "pickleparser", "playwright", "portkey-ai", "puppeteer", "pyodide", "redis", "replicate", "sonix-speech-recognition", "srt-parser-2", "typeorm", "typesense", "usearch", "voy-search", "weaviate-client", "web-auth-library", "word-extractor", "ws", "youtubei.js"] }, "sha512-xUe5UIlh1yZjt/cMtdSVlCoC5xm/RMN/rp+KZGLbquvjQeONmQ2rvpCqWjAOgQ6SPLqKiXvoXaKSm20r+LHISw=="], - "@langchain/core": ["@langchain/core@0.3.53", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.16", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.22.3" } }, "sha512-rHlBcEG5PNaWxlVhPTLiZ0WRCr/URNEUynhgZTZ8QbTJhQ1vEMibdr2YL9LYKHSXNyAp/b5j3itcu3epB8FD7Q=="], + "@langchain/core": ["@langchain/core@0.3.78", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.67", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.25.32", "zod-to-json-schema": "^3.22.3" } }, "sha512-Nn0x9erQlK3zgtRU1Z8NUjLuyW0gzdclMsvLQ6wwLeDqV91pE+YKl6uQb+L2NUDs4F0N7c2Zncgz46HxrvPzuA=="], "@langchain/openai": ["@langchain/openai@0.5.10", "", { "dependencies": { "js-tiktoken": "^1.0.12", "openai": "^4.96.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.22.3" }, "peerDependencies": { "@langchain/core": ">=0.3.48 <0.4.0" } }, "sha512-hBQIWjcVxGS7tgVvgBBmrZ5jSaJ8nu9g6V64/Tx6KGjkW7VdGmUvqCO+koiQCOZVL7PBJkHWAvDsbghPYXiZEA=="], "@langchain/textsplitters": ["@langchain/textsplitters@0.1.0", "", { "dependencies": { "js-tiktoken": "^1.0.12" }, "peerDependencies": { "@langchain/core": ">=0.2.21 <0.4.0" } }, "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw=="], + "@langchain/weaviate": ["@langchain/weaviate@0.2.3", "", { "dependencies": { "uuid": "^10.0.0", "weaviate-client": "^3.5.2" }, "peerDependencies": { "@langchain/core": ">=0.2.21 <0.4.0" } }, "sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w=="], + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.11.0", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.3", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ=="], "@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" } }, "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg=="], @@ -296,6 +312,26 @@ "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], + + "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], + + "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], + + "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], + + "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], + + "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], + + "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], + + "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], + + "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], + + "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.2", "", {}, "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="], "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.6", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw=="], @@ -364,6 +400,8 @@ "@rushstack/eslint-patch": ["@rushstack/eslint-patch@1.11.0", "", {}, "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ=="], + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], @@ -374,8 +412,6 @@ "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - "@types/diff-match-patch": ["@types/diff-match-patch@1.0.36", "", {}, "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg=="], - "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -460,8 +496,12 @@ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.7.2", "", { "os": "win32", "cpu": "x64" }, "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA=="], + "@vercel/oidc": ["@vercel/oidc@3.0.1", "", {}, "sha512-V/YRVrJDqM6VaMBjRUrd6qRMrTKvZjHdVdEmdXsOZMulTa3iK98ijKTc3wldBmst6W5rHpqMoKllKcBAHgN7GQ=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + "abort-controller-x": ["abort-controller-x@0.4.3", "", {}, "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA=="], + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], @@ -474,7 +514,7 @@ "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "ai": ["ai@4.3.13", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.7", "@ai-sdk/react": "1.2.11", "@ai-sdk/ui-utils": "1.2.10", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["react"] }, "sha512-cC5HXItuOwGykSMacCPzNp6+NMTxeuTjOenztVgSJhdC9Z4OrzBxwkyeDAf4h1QP938ZFi7IBdq3u4lxVoVmvw=="], + "ai": ["ai@5.0.33", "", { "dependencies": { "@ai-sdk/gateway": "1.0.18", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.8", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-qmYQTb+K0204mawkjhCMGYPutDqPgmCeh/tQ9I3FpZfxvUe8R462D/MQUgLMFnMQ0z2kpUMoOJBKX6dSKb0OwA=="], "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], @@ -512,13 +552,11 @@ "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], - "async": ["async@1.5.2", "", {}, "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w=="], - "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "auth0": ["auth0@4.23.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-P6X6mGEoBJN4XkocValU+cJglYMLFBvXAvEHUgpHD4iWwnStXmHgWI3hykL96ODj9NekRWWECdq+cWyXHUgJOg=="], + "auth0": ["auth0@4.31.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-DO9ET/o4OILQHOfNPBnF+wP3zC9IGVeCTH3pCbTlmE7+3v8RfipxkkKJ/gW3tFPb3w8qkkZHTe/SzmDjjY/CEQ=="], "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], @@ -590,6 +628,8 @@ "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "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=="], @@ -620,6 +660,8 @@ "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], + "cross-fetch": ["cross-fetch@3.2.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], @@ -628,6 +670,8 @@ "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + "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=="], @@ -666,8 +710,6 @@ "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], - "diff-match-patch": ["diff-match-patch@1.0.5", "", {}, "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="], - "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], @@ -760,8 +802,6 @@ "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - "event-stream": ["event-stream@3.3.5", "", { "dependencies": { "duplexer": "^0.1.1", "from": "^0.1.7", "map-stream": "0.0.7", "pause-stream": "^0.0.11", "split": "^1.0.1", "stream-combiner": "^0.2.2", "through": "^2.3.8" } }, "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g=="], - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], "eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], @@ -770,7 +810,7 @@ "eventsource": ["eventsource@3.0.6", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA=="], - "eventsource-parser": ["eventsource-parser@3.0.1", "", {}, "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA=="], + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], "expr-eval": ["expr-eval@2.0.2", "", {}, "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg=="], @@ -792,6 +832,8 @@ "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], "file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="], @@ -820,14 +862,14 @@ "formdata-node": ["formdata-node@4.4.1", "", { "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" } }, "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ=="], + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - "from": ["from@0.1.7", "", {}, "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g=="], - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], @@ -836,9 +878,11 @@ "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], + "gaxios": ["gaxios@7.1.2", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-/Szrn8nr+2TsQT1Gp8iIe/BEytJmbyfrbFh419DfGQSkEgNEhbPi7JRJuughjkTzPWgU9gBQf5AVu3DbHt0OXA=="], + + "gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], - "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "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=="], @@ -858,13 +902,13 @@ "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], + "google-auth-library": ["google-auth-library@10.4.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-CmIrSy1bqMQUsPmA9+hcSbAXL80cFhu40cGMUjCaLpNKVzzvi+0uAHq8GNZxkoGYIsTX4ZQ7e4aInAqWxgn4fg=="], - "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + "google-logging-utils": ["google-logging-utils@1.1.1", "", {}, "sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A=="], - "googleapis": ["googleapis@148.0.0", "", { "dependencies": { "google-auth-library": "^9.0.0", "googleapis-common": "^7.0.0" } }, "sha512-8PDG5VItm6E1TdZWDqtRrUJSlBcNwz0/MwCa6AL81y/RxPGXJRUwKqGZfCoVX1ZBbfr3I4NkDxBmeTyOAZSWqw=="], + "googleapis": ["googleapis@161.0.0", "", { "dependencies": { "google-auth-library": "^10.2.0", "googleapis-common": "^8.0.0" } }, "sha512-JZy2cWMxgUF8E09KHzplI+z+FVG8NWDB/bsf4xevt9Um4bInb0X1qaG9qpDn49DHT5HsU0mOp3EOBGb8+AdE3Q=="], - "googleapis-common": ["googleapis-common@7.2.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^6.0.3", "google-auth-library": "^9.7.0", "qs": "^6.7.0", "url-template": "^2.0.8", "uuid": "^9.0.0" } }, "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA=="], + "googleapis-common": ["googleapis-common@8.0.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^7.0.0-rc.4", "google-auth-library": "^10.1.0", "qs": "^6.7.0", "url-template": "^2.0.8" } }, "sha512-66if47It7y+Sab3HMkwEXx1kCq9qUC9px8ZXoj1CMrmLmUw81GpbnsNlXnlyZyGbGPGcj+tDD9XsZ23m7GLaJQ=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], @@ -872,7 +916,11 @@ "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], - "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], + "graphql": ["graphql@16.11.0", "", {}, "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw=="], + + "graphql-request": ["graphql-request@6.1.0", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "cross-fetch": "^3.1.5" }, "peerDependencies": { "graphql": "14 - 16" } }, "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw=="], + + "gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], @@ -984,8 +1032,6 @@ "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=="], @@ -1010,7 +1056,7 @@ "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "jose": ["jose@6.1.0", "", {}, "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA=="], "js-tiktoken": ["js-tiktoken@1.0.20", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A=="], @@ -1032,8 +1078,6 @@ "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "jsondiffpatch": ["jsondiffpatch@0.6.0", "", { "dependencies": { "@types/diff-match-patch": "^1.0.36", "chalk": "^5.3.0", "diff-match-patch": "^1.0.5" }, "bin": { "jsondiffpatch": "bin/jsondiffpatch.js" } }, "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ=="], - "jsonpointer": ["jsonpointer@5.0.1", "", {}, "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="], "jsonwebtoken": ["jsonwebtoken@9.0.2", "", { "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ=="], @@ -1048,7 +1092,7 @@ "langchain": ["langchain@0.3.24", "", { "dependencies": { "@langchain/openai": ">=0.1.0 <0.6.0", "@langchain/textsplitters": ">=0.0.0 <0.2.0", "js-tiktoken": "^1.0.12", "js-yaml": "^4.1.0", "jsonpointer": "^5.0.1", "langsmith": "^0.3.16", "openapi-types": "^12.1.3", "p-retry": "4", "uuid": "^10.0.0", "yaml": "^2.2.1", "zod": "^3.22.4", "zod-to-json-schema": "^3.22.3" }, "peerDependencies": { "@langchain/anthropic": "*", "@langchain/aws": "*", "@langchain/cerebras": "*", "@langchain/cohere": "*", "@langchain/core": ">=0.2.21 <0.4.0", "@langchain/deepseek": "*", "@langchain/google-genai": "*", "@langchain/google-vertexai": "*", "@langchain/google-vertexai-web": "*", "@langchain/groq": "*", "@langchain/mistralai": "*", "@langchain/ollama": "*", "@langchain/xai": "*", "axios": "*", "cheerio": "*", "handlebars": "^4.7.8", "peggy": "^3.0.2", "typeorm": "*" }, "optionalPeers": ["@langchain/anthropic", "@langchain/aws", "@langchain/cerebras", "@langchain/cohere", "@langchain/deepseek", "@langchain/google-genai", "@langchain/google-vertexai", "@langchain/google-vertexai-web", "@langchain/groq", "@langchain/mistralai", "@langchain/ollama", "@langchain/xai", "axios", "cheerio", "handlebars", "peggy", "typeorm"] }, "sha512-BTjiYkUCpWFAmufK8J5zMqc5aUs4eEnAXPWtPe2+R4ZPP+U7bXJSBHAcrB40rQ3VeTdRgMvgDjekOOgCMWut6Q=="], - "langsmith": ["langsmith@0.3.25", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "openai": "*" }, "optionalPeers": ["openai"] }, "sha512-KuJu89VY3DmCdFvlVxQG4owQl546Z6pQc6TbhsyP77MkVJgZr8yvevZvvcXDWIpT2o2s52c9Aww2XVOH6GmHxQ=="], + "langsmith": ["langsmith@0.3.72", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "@opentelemetry/api": "*", "@opentelemetry/exporter-trace-otlp-proto": "*", "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/exporter-trace-otlp-proto", "@opentelemetry/sdk-trace-base", "openai"] }, "sha512-XjTonMq2fIebzV0BRlPx8mi+Ih/NsQT6W484hrW/pJYuq0aT5kpLtzQthVVmsXH8ZYYkgkbQ5Gh5Mz1qoCrAwg=="], "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], @@ -1066,6 +1110,8 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], + "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], @@ -1082,6 +1128,8 @@ "lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], + "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], @@ -1090,8 +1138,6 @@ "lucide-react": ["lucide-react@0.475.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg=="], - "map-stream": ["map-stream@0.0.7", "", {}, "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ=="], - "marked": ["marked@15.0.11", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA=="], "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], @@ -1196,6 +1242,12 @@ "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], + "nice-grpc": ["nice-grpc@2.1.13", "", { "dependencies": { "@grpc/grpc-js": "^1.14.0", "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-IkXNok2NFyYh0WKp1aJFwFV3Ue2frBkJ16ojrmgX3Tc9n0g7r0VU+ur3H/leDHPPGsEeVozdMynGxYT30k3D/Q=="], + + "nice-grpc-client-middleware-retry": ["nice-grpc-client-middleware-retry@3.1.12", "", { "dependencies": { "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-CHKIeHznAePOsT2dLeGwoOFaybQz6LvkIsFfN8SLcyGyTR7AB6vZMaECJjx+QPL8O2qVgaVE167PdeOmQrPuag=="], + + "nice-grpc-common": ["nice-grpc-common@2.0.2", "", { "dependencies": { "ts-error": "^1.0.6" } }, "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ=="], + "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], @@ -1286,8 +1338,6 @@ "path-type": ["path-type@3.0.0", "", { "dependencies": { "pify": "^3.0.0" } }, "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg=="], - "pause-stream": ["pause-stream@0.0.11", "", { "dependencies": { "through": "~2.3" } }, "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A=="], - "pdf-parse": ["pdf-parse@1.1.1", "", { "dependencies": { "debug": "^3.1.0", "node-ensure": "^0.0.0" } }, "sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A=="], "peek-readable": ["peek-readable@4.1.0", "", {}, "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="], @@ -1336,6 +1386,8 @@ "property-information": ["property-information@7.0.0", "", {}, "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg=="], + "protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], @@ -1390,6 +1442,8 @@ "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], "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=="], @@ -1420,8 +1474,6 @@ "scheduler": ["scheduler@0.25.0", "", {}, "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA=="], - "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "send": ["send@1.2.0", "", { "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.0", "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw=="], @@ -1478,14 +1530,10 @@ "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="], - "split": ["split@1.0.1", "", { "dependencies": { "through": "2" } }, "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg=="], - "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - "stream-combiner": ["stream-combiner@0.2.2", "", { "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" } }, "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ=="], - "streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="], "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -1548,8 +1596,6 @@ "throttleit": ["throttleit@2.1.0", "", {}, "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw=="], - "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], - "tiny-async-pool": ["tiny-async-pool@2.1.0", "", {}, "sha512-ltAHPh/9k0STRQqaoUX52NH4ZQYAJz24ZAEwf1Zm+HYg3l9OXTWeqWKyYsHu40wF/F0rxd2N2bk5sLvX2qlSvg=="], "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], @@ -1574,6 +1620,8 @@ "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + "ts-error": ["ts-error@1.0.6", "", {}, "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA=="], + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], @@ -1600,8 +1648,6 @@ "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=="], - "underscore": ["underscore@1.13.7", "", {}, "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="], - "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], @@ -1652,6 +1698,8 @@ "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], + "weaviate-client": ["weaviate-client@3.9.0", "", { "dependencies": { "abort-controller-x": "^0.4.3", "graphql": "^16.11.0", "graphql-request": "^6.1.0", "long": "^5.3.2", "nice-grpc": "^2.1.12", "nice-grpc-client-middleware-retry": "^3.1.11", "nice-grpc-common": "^2.0.2", "uuid": "^9.0.1" } }, "sha512-7qwg7YONAaT4zWnohLrFdzky+rZegVe76J+Tky/+7tuyvjFpdKgSrdqI/wPDh8aji0ZGZrL4DdGwGfFnZ+uV4w=="], + "web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], @@ -1670,8 +1718,6 @@ "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=="], - "word-extractor": ["word-extractor@0.3.0", "", { "dependencies": { "async": "^1.5.2", "event-stream": "^3.3.4", "underscore": "^1.8.3" } }, "sha512-gFRsCojw2sijgoHXAa11b9K2OeEvajw4iQp89doDlseVYklR56Z22AlzDKeP1bo4N5wT/AJWptbcPQPstXVlsQ=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], @@ -1682,20 +1728,32 @@ "ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + "yaml": ["yaml@2.7.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ=="], + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], + "@auth0/ai/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + + "@auth0/ai-vercel/@ai-sdk/react": ["@ai-sdk/react@2.0.60", "", { "dependencies": { "@ai-sdk/provider-utils": "3.0.10", "ai": "5.0.60", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.25.76 || ^4.1.8" }, "optionalPeers": ["zod"] }, "sha512-Ev0MC0I7eDcCH4FnrHzK48g9bJjyF3F67MMq76qoVsbtcs6fGIO5RjmYgPoFeSo8/yQ5EM6i/14yfcD0oB+moA=="], + + "@auth0/ai-vercel/ai": ["ai@5.0.60", "", { "dependencies": { "@ai-sdk/gateway": "1.0.33", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.10", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-80U/3kmdBW6g+JkLXpz/P2EwkyEaWlPlYtuLUpx/JYK9F7WZh9NnkYoh1KvUi1Sbpo0NyurBTvX0a2AG9mmbDA=="], + + "@auth0/nextjs-auth0/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "@browserbasehq/sdk/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "@browserbasehq/stagehand/ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], @@ -1710,6 +1768,10 @@ "@langchain/core/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + "@langchain/openai/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + + "@modelcontextprotocol/sdk/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], "@types/node-fetch/form-data": ["form-data@4.0.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="], @@ -1730,10 +1792,18 @@ "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "color/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-string/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "eslint/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -1742,15 +1812,17 @@ "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + "eventsource/eventsource-parser": ["eventsource-parser@3.0.1", "", {}, "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA=="], + "express/mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "fetch-blob/web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], - "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - "googleapis-common/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "ibm-cloud-sdk-core/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], @@ -1758,12 +1830,14 @@ "is-bun-module/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], - "jsondiffpatch/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - "jsonwebtoken/jws": ["jws@3.2.2", "", { "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA=="], "jsonwebtoken/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "langchain/langsmith": ["langsmith@0.3.25", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "openai": "*" }, "optionalPeers": ["openai"] }, "sha512-KuJu89VY3DmCdFvlVxQG4owQl546Z6pQc6TbhsyP77MkVJgZr8yvevZvvcXDWIpT2o2s52c9Aww2XVOH6GmHxQ=="], + + "langchain/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "langsmith/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], @@ -1806,6 +1880,8 @@ "type-is/mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], + "weaviate-client/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -1814,8 +1890,16 @@ "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@anthropic-ai/sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + "@auth0/ai-vercel/@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.10", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.5" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-T1gZ76gEIwffep6MWI0QNy9jgoybUHE7TRaHB5k54K8mF91ciGFlbtCGxDYhMH3nCRergKwYFIDeFF0hJSIQHQ=="], + + "@auth0/ai-vercel/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@1.0.33", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.10", "@vercel/oidc": "^3.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-v9i3GPEo4t3fGcSkQkc07xM6KJN75VUv7C1Mqmmsu2xD8lQwnQfsrgAXyNuWe20yGY0eHuheSPDZhiqsGKtH1g=="], + + "@auth0/ai-vercel/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.10", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.5" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-T1gZ76gEIwffep6MWI0QNy9jgoybUHE7TRaHB5k54K8mF91ciGFlbtCGxDYhMH3nCRergKwYFIDeFF0hJSIQHQ=="], + "@browserbasehq/sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], @@ -1872,6 +1956,12 @@ "chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "color/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], @@ -1882,6 +1972,8 @@ "jsonwebtoken/jws/jwa": ["jwa@1.4.1", "", { "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA=="], + "langchain/langsmith/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "next/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], "npm-run-all/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], @@ -1910,12 +2002,22 @@ "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "npm-run-all/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], "wrap-ansi-cjs/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "cliui/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], } } diff --git a/ts-vercel-ai/langgraph.json b/ts-vercel-ai/langgraph.json deleted file mode 100644 index dd8e471..0000000 --- a/ts-vercel-ai/langgraph.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "node_version": "20", - "graphs": { - "agent": "./src/lib/agent.ts:agent" - }, - "env": ".env.local", - "dependencies": ["."] -} diff --git a/ts-vercel-ai/package.json b/ts-vercel-ai/package.json index 94b4e12..46b3148 100644 --- a/ts-vercel-ai/package.json +++ b/ts-vercel-ai/package.json @@ -21,24 +21,27 @@ "node": ">=18" }, "dependencies": { - "@ai-sdk/openai": "^1.3.21", - "@auth0/ai-vercel": "^3.1.0", + "@ai-sdk/openai": "2.0.24", + "@ai-sdk/react": "2.0.33", + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", + "@auth0/ai-vercel": "file:auth0-ai-vercel-0.0.0.tgz", "@auth0/nextjs-auth0": "4.4.2", - "@langchain/community": "^0.3.42", + "@langchain/community": "^0.3.53", "@radix-ui/react-avatar": "^1.1.7", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dialog": "^1.1.11", "@radix-ui/react-dropdown-menu": "^2.1.12", "@radix-ui/react-popover": "^1.1.11", "@radix-ui/react-slot": "^1.2.0", - "ai": "^4.3.13", + "ai": "5.0.33", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", "dotenv": "^17.0.1", "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", - "googleapis": "^148.0.0", + "googleapis": "^161.0.0", + "jose": "^6.1.0", "llm-chunk": "^0.0.1", "lucide-react": "^0.475.0", "marked": "^15.0.7", @@ -58,8 +61,8 @@ "tailwindcss-animate": "^1.0.7", "use-stick-to-bottom": "^1.0.44", "vaul": "^1.1.2", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.23.2" + "zod": "^3.25.76", + "zod-to-json-schema": "^3.24.5" }, "devDependencies": { "@next/bundle-analyzer": "^15.1.7", @@ -77,5 +80,8 @@ "tailwindcss": "3.4.17", "tsx": "^4.19.4", "typescript": "5.7.3" + }, + "resolutions": { + "@auth0/ai": "file:auth0-ai-0.0.0.tgz" } } diff --git a/ts-vercel-ai/src/app/api/chat/route.ts b/ts-vercel-ai/src/app/api/chat/route.ts index eb21f58..5554f1d 100644 --- a/ts-vercel-ai/src/app/api/chat/route.ts +++ b/ts-vercel-ai/src/app/api/chat/route.ts @@ -1,5 +1,11 @@ import { NextRequest } from 'next/server'; -import { streamText, Message, createDataStreamResponse, DataStreamWriter } from 'ai'; +import { + streamText, + type UIMessage, + createUIMessageStream, + createUIMessageStreamResponse, + convertToModelMessages, +} from 'ai'; import { openai } from '@ai-sdk/openai'; import { setAIContext } from '@auth0/ai-vercel'; import { errorSerializer, withInterruptions } from '@auth0/ai-vercel/interrupts'; @@ -13,17 +19,21 @@ import { getContextDocumentsTool } from '@/lib/tools/context-docs'; const date = new Date().toISOString(); -const AGENT_SYSTEM_TEMPLATE = `You are a personal assistant named Assistant0. You are a helpful assistant that can answer questions and help with tasks. You have access to a set of tools, use the tools as needed to answer the user's question. Render the email body as a markdown block, do not wrap it in code blocks. Today is ${date}.`; +const AGENT_SYSTEM_TEMPLATE = `You are a personal assistant named Assistant0. You are a helpful assistant that can answer questions and help with tasks. +You have access to a set of tools. When using tools, you MUST provide valid JSON arguments. Always format tool call arguments as proper JSON objects. +For example, when calling shop_online tool, format like this: +{"product": "iPhone", "qty": 1, "priceLimit": 1000} +Use the tools as needed to answer the user's question. Render the email body as a markdown block, do not wrap it in code blocks. Today is ${date}.`; /** * This handler initializes and calls an tool calling agent. */ export async function POST(req: NextRequest) { - const request = await req.json(); + const { id, messages }: { id: string; messages: Array } = await req.json(); - const messages = sanitizeMessages(request.messages); + // const sanitizedMessages = sanitize(messages); - setAIContext({ threadID: request.id }); + setAIContext({ threadID: id }); const tools = { serpApiTool, @@ -35,36 +45,57 @@ export async function POST(req: NextRequest) { getContextDocumentsTool, }; - return createDataStreamResponse({ + const stream = createUIMessageStream({ + originalMessages: messages, execute: withInterruptions( - async (dataStream: DataStreamWriter) => { + async ({ writer }) => { const result = streamText({ - model: openai('gpt-4o-mini'), + model: openai.chat('gpt-4o-mini'), system: AGENT_SYSTEM_TEMPLATE, - messages, - maxSteps: 5, + messages: convertToModelMessages(messages), tools, - }); + onFinish: (output) => { + if (output.finishReason === 'tool-calls') { + const lastMessage = output.content[output.content.length - 1]; + if (lastMessage?.type === 'tool-error') { + const { toolName, toolCallId, error, input } = lastMessage; + const serializableError = { + cause: error, + toolCallId: toolCallId, + toolName: toolName, + toolArgs: input, + }; - result.mergeIntoDataStream(dataStream, { - sendReasoning: true, + throw serializableError; + } + } + }, }); + + writer.merge( + result.toUIMessageStream({ + sendReasoning: true, + }), + ); }, { - messages, + messages: messages, tools, }, ), - onError: errorSerializer((err: any) => { + onError: errorSerializer((err) => { console.log(err); - return `An error occurred! ${err.message}`; + return `An error occurred! ${(err as Error).message}`; }), }); + + return createUIMessageStreamResponse({ stream }); } // Vercel AI tends to get stuck when there are incomplete tool calls in messages -const sanitizeMessages = (messages: Message[]) => { - return messages.filter( - (message) => !(message.role === 'assistant' && message.parts && message.parts.length > 0 && message.content === ''), - ); -}; +// function sanitize(messages: UIMessage[]) { +// return messages.filter( +// (m) => +// !(m.role === 'assistant' && Array.isArray(m.parts) && m.parts.length > 0 && !m.parts.some((p: any) => !!p?.text)), +// ); +// } diff --git a/ts-vercel-ai/src/app/documents/page.tsx b/ts-vercel-ai/src/app/documents/page.tsx index fe107da..1cf1990 100644 --- a/ts-vercel-ai/src/app/documents/page.tsx +++ b/ts-vercel-ai/src/app/documents/page.tsx @@ -28,12 +28,12 @@ export default async function DocumentsPage() { function getSharingStatus(sharedWith: string[] | null): ReactNode { if (!sharedWith || sharedWith.length === 0) { - return

Not shared

; + return
Not shared
; } if (sharedWith.includes(user?.email!)) { - return

Shared with you

; + return
Shared with you
; } - return

Shared with: {sharedWith.join(', ')}

; + return
Shared with: {sharedWith.join(', ')}
; } return ( diff --git a/ts-vercel-ai/src/components/auth0-ai/federated-connections/federated-connection-auth-props.tsx b/ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx similarity index 95% rename from ts-vercel-ai/src/components/auth0-ai/federated-connections/federated-connection-auth-props.tsx rename to ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx index 19344cb..5c060ea 100644 --- a/ts-vercel-ai/src/components/auth0-ai/federated-connections/federated-connection-auth-props.tsx +++ b/ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx @@ -9,7 +9,7 @@ import { ReactNode } from 'react'; */ export type AuthComponentMode = 'redirect' | 'popup' | 'auto'; -export type FederatedConnectionAuthProps = { +export type TokenVaultAuthProps = { interrupt: { connection: string; requiredScopes: string[]; diff --git a/ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx b/ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx new file mode 100644 index 0000000..8c9dd3d --- /dev/null +++ b/ts-vercel-ai/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx @@ -0,0 +1,33 @@ +import { useId } from 'react'; +import { TokenVaultInterrupt } from '@auth0/ai/interrupts'; +import type { Auth0InterruptionUI } from '@auth0/ai-vercel'; + +import { TokenVaultConsentPopup } from '@/components/auth0-ai/TokenVault/popup'; + +type PossibleInterrupt = Auth0InterruptionUI | Record; + +interface TokenVaultInterruptHandlerProps { + interrupt: PossibleInterrupt | undefined | null; + onFinish?: () => void; +} + +export function TokenVaultInterruptHandler({ interrupt, onFinish }: TokenVaultInterruptHandlerProps) { + const id = useId(); + if (!interrupt || !TokenVaultInterrupt.isInterrupt(interrupt)) { + return null; + } + + return ( +
+ +
+ ); +} diff --git a/ts-vercel-ai/src/components/auth0-ai/TokenVault/index.tsx b/ts-vercel-ai/src/components/auth0-ai/TokenVault/index.tsx new file mode 100644 index 0000000..f45f88f --- /dev/null +++ b/ts-vercel-ai/src/components/auth0-ai/TokenVault/index.tsx @@ -0,0 +1,28 @@ +import { BrowserView, MobileView } from 'react-device-detect'; + +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; +import { TokenVaultConsentPopup } from './popup'; +import { TokenVaultConsentRedirect } from './redirect'; + +export function TokenVaultConsent(props: TokenVaultAuthProps) { + const { mode } = props; + + switch (mode) { + case 'popup': + return ; + case 'redirect': + return ; + case 'auto': + default: + return ( + <> + + + + + + + + ); + } +} diff --git a/ts-vercel-ai/src/components/auth0-ai/federated-connections/popup.tsx b/ts-vercel-ai/src/components/auth0-ai/TokenVault/popup.tsx similarity index 63% rename from ts-vercel-ai/src/components/auth0-ai/federated-connections/popup.tsx rename to ts-vercel-ai/src/components/auth0-ai/TokenVault/popup.tsx index 67b7e56..86a470d 100644 --- a/ts-vercel-ai/src/components/auth0-ai/federated-connections/popup.tsx +++ b/ts-vercel-ai/src/components/auth0-ai/TokenVault/popup.tsx @@ -1,17 +1,17 @@ -'use client'; +"use client"; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from "react"; -import { WaitingMessage } from '../util/loader'; -import { PromptUserContainer } from '../util/prompt-user-container'; -import { FederatedConnectionAuthProps } from './federated-connection-auth-props'; +import { WaitingMessage } from "../util/loader"; +import { PromptUserContainer } from "../util/prompt-user-container"; +import { TokenVaultAuthProps } from "./TokenVaultAuthProps"; -export function EnsureAPIAccessPopup({ +export function TokenVaultConsentPopup({ interrupt: { connection, requiredScopes, resume }, connectWidget: { icon, title, description, action, containerClassName }, - auth: { authorizePath = '/auth/login', returnTo = '/close' } = {}, + auth: { authorizePath = "/auth/login", returnTo = "/close" } = {}, onFinish, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { const [isLoading, setIsLoading] = useState(false); const [loginPopup, setLoginPopup] = useState(null); @@ -26,9 +26,9 @@ export function EnsureAPIAccessPopup({ setIsLoading(false); setLoginPopup(null); clearInterval(interval); - if (typeof onFinish === 'function') { + if (typeof onFinish === "function") { onFinish(); - } else if (typeof resume === 'function') { + } else if (typeof resume === "function") { resume(); } } @@ -45,24 +45,25 @@ export function EnsureAPIAccessPopup({ const search = new URLSearchParams({ returnTo, connection, - access_type: 'offline', - prompt: 'consent', + access_type: "offline", + prompt: "consent", connection_scope: requiredScopes.join(), }); const url = new URL(authorizePath, window.location.origin); url.search = search.toString(); - const windowFeatures = 'width=800,height=650,status=no,toolbar=no,menubar=no'; - const popup = window.open(url.toString(), '_blank', windowFeatures); + const windowFeatures = + "width=800,height=650,status=no,toolbar=no,menubar=no"; + const popup = window.open(url.toString(), "_blank", windowFeatures); if (!popup) { - console.error('Popup blocked by the browser'); + console.error("Popup blocked by the browser"); return; } else { setLoginPopup(popup); setIsLoading(true); } - }, [connection, requiredScopes, returnTo, authorizePath]); + }, [connection, requiredScopes]); if (isLoading) { return ; @@ -75,7 +76,7 @@ export function EnsureAPIAccessPopup({ icon={icon} containerClassName={containerClassName} action={{ - label: action?.label ?? 'Connect', + label: action?.label ?? "Connect", onClick: startLoginPopup, }} /> diff --git a/ts-vercel-ai/src/components/auth0-ai/federated-connections/redirect.tsx b/ts-vercel-ai/src/components/auth0-ai/TokenVault/redirect.tsx similarity index 85% rename from ts-vercel-ai/src/components/auth0-ai/federated-connections/redirect.tsx rename to ts-vercel-ai/src/components/auth0-ai/TokenVault/redirect.tsx index bd32f5d..c29e635 100644 --- a/ts-vercel-ai/src/components/auth0-ai/federated-connections/redirect.tsx +++ b/ts-vercel-ai/src/components/auth0-ai/TokenVault/redirect.tsx @@ -1,13 +1,13 @@ 'use client'; import { PromptUserContainer } from '../util/prompt-user-container'; -import { FederatedConnectionAuthProps } from './federated-connection-auth-props'; +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; -export function EnsureAPIAccessRedirect({ +export function TokenVaultConsentRedirect({ interrupt: { requiredScopes, connection }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = '/auth/login', returnTo = window.location.pathname } = {}, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { return ( ; - case 'redirect': - return ; - case 'auto': - default: - return ( - <> - - - - - - - - ); - } -} diff --git a/ts-vercel-ai/src/components/auth0-ai/federated-connections/index.tsx b/ts-vercel-ai/src/components/auth0-ai/federated-connections/index.tsx deleted file mode 100644 index 2d0ba17..0000000 --- a/ts-vercel-ai/src/components/auth0-ai/federated-connections/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { FederatedConnectionInterrupt } from '@auth0/ai/interrupts'; -import type { Auth0InterruptionUI } from '@auth0/ai-vercel/react'; - -import { EnsureAPIAccess } from '@/components/auth0-ai/federated-connections/ensure-api-access'; - -interface FederatedConnectionInterruptHandlerProps { - interrupt: Auth0InterruptionUI | null; -} - -export function FederatedConnectionInterruptHandler({ interrupt }: FederatedConnectionInterruptHandlerProps) { - if (!FederatedConnectionInterrupt.isInterrupt(interrupt)) { - return null; - } - - return ( -
- -
- ); -} diff --git a/ts-vercel-ai/src/components/chat-message-bubble.tsx b/ts-vercel-ai/src/components/chat-message-bubble.tsx index 4e68c26..894b288 100644 --- a/ts-vercel-ai/src/components/chat-message-bubble.tsx +++ b/ts-vercel-ai/src/components/chat-message-bubble.tsx @@ -1,25 +1,154 @@ -import type { Message } from 'ai/react'; +import { type UIMessage } from 'ai'; import { MemoizedMarkdown } from './memoized-markdown'; import { cn } from '@/utils/cn'; +import { Loader2, CheckCircle, AlertCircle } from 'lucide-react'; + +function uiMessageToText(message: UIMessage): string { + if (Array.isArray((message as any).parts)) { + return (message as any).parts + .map((p: any) => { + if (typeof p === 'string') return p; + if (typeof p?.text === 'string') return p.text; + if (typeof p?.content === 'string') return p.content; + return ''; + }) + .join(''); + } + return (message as any).content ?? ''; +} + +function getToolCallsFromMessage(message: UIMessage): Array<{ + toolCallId: string; + toolName: string; + args: any; + result?: any; + status: 'pending' | 'complete' | 'error'; +}> { + const parts = (message as any).parts; + if (!Array.isArray(parts)) return []; + + const toolCalls: Array<{ + toolCallId: string; + toolName: string; + args: any; + result?: any; + status: 'pending' | 'complete' | 'error'; + }> = []; + + parts.forEach((part: any) => { + // Check if this part is a tool call (starts with "tool-") + if (part?.type && part.type.startsWith('tool-') && part.toolCallId) { + const toolName = part.type.replace('tool-', ''); + + // Determine status based on available information + let status: 'pending' | 'complete' | 'error' = 'pending'; + if (part.state === 'output-available' || part.output !== undefined) { + status = 'complete'; + } else if (part.state === 'error' || part.isError) { + status = 'error'; + } + + toolCalls.push({ + toolCallId: part.toolCallId, + toolName, + args: part.input || part.args || {}, + result: part.output || part.result, + status + }); + } + }); + + return toolCalls; +} + +function ToolCallDisplay({ toolCall }: { + toolCall: { + toolCallId: string; + toolName: string; + args: any; + result?: any; + status: 'pending' | 'complete' | 'error'; + } +}) { + const { toolName, args, result, status } = toolCall; + + return ( +
+
+ {status === 'pending' && } + {status === 'complete' && } + {status === 'error' && } + + {status === 'pending' && `Calling ${toolName}...`} + {status === 'complete' && `Called ${toolName}`} + {status === 'error' && `Error calling ${toolName}`} + +
+ + {/* Show tool arguments/input */} + {args && Object.keys(args).length > 0 && ( +
+
Input:
+
+ {Object.entries(args).map(([key, value]) => ( +
+ {key}:{' '} + + {typeof value === 'string' ? `"${value}"` : JSON.stringify(value)} + +
+ ))} +
+
+ )} + + {/* Show tool result/output */} + {result !== undefined && ( +
+
Output:
+
+ + {typeof result === 'string' ? result : JSON.stringify(result, null, 2)} + +
+
+ )} +
+ ); +} + +export function ChatMessageBubble(props: { message: UIMessage; aiEmoji?: string }) { + const { message, aiEmoji } = props; + const text = uiMessageToText(message); + const toolCalls = getToolCallsFromMessage(message); -export function ChatMessageBubble(props: { message: Message; aiEmoji?: string }) { return (
- {props.message.role !== 'user' && ( -
- {props.aiEmoji} + {message.role !== 'user' && ( +
+ {aiEmoji}
)}
- + {/* Render tool calls if present */} + {toolCalls.length > 0 && ( +
+ {toolCalls.map((toolCall, index) => ( + + ))} +
+ )} + + {/* Render text content if present */} + {text && }
); -} +} \ No newline at end of file diff --git a/ts-vercel-ai/src/components/chat-window.tsx b/ts-vercel-ai/src/components/chat-window.tsx index b371fac..07af61c 100644 --- a/ts-vercel-ai/src/components/chat-window.tsx +++ b/ts-vercel-ai/src/components/chat-window.tsx @@ -1,20 +1,20 @@ 'use client'; -import { type Message } from 'ai'; +import { useState, type FormEvent, type ReactNode } from 'react'; +import { type UIMessage, DefaultChatTransport, generateId, lastAssistantMessageIsCompleteWithToolCalls } from 'ai'; import { useChat } from '@ai-sdk/react'; -import type { FormEvent, ReactNode } from 'react'; import { toast } from 'sonner'; import { StickToBottom, useStickToBottomContext } from 'use-stick-to-bottom'; import { ArrowDown, ArrowUpIcon, LoaderCircle } from 'lucide-react'; import { useInterruptions } from '@auth0/ai-vercel/react'; -import { FederatedConnectionInterruptHandler } from '@/components/auth0-ai/federated-connections'; +import { TokenVaultInterruptHandler } from '@/components/auth0-ai/TokenVault/TokenVaultInterruptHandler'; import { ChatMessageBubble } from '@/components/chat-message-bubble'; import { Button } from '@/components/ui/button'; import { cn } from '@/utils/cn'; function ChatMessages(props: { - messages: Message[]; + messages: UIMessage[]; emptyStateComponent: ReactNode; aiEmoji?: string; className?: string; @@ -112,25 +112,28 @@ export function ChatWindow(props: { placeholder?: string; emoji?: string; }) { - const chat = useInterruptions((handler) => + const { messages, sendMessage, status, toolInterrupt } = useInterruptions((handler) => // eslint-disable-next-line react-hooks/rules-of-hooks useChat({ - api: props.endpoint, + transport: new DefaultChatTransport({ api: props.endpoint }), + generateId, onError: handler((e: Error) => { console.error('Error: ', e); toast.error(`Error while processing your request`, { description: e.message }); }), + sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls, }), ); - function isChatLoading(): boolean { - return chat.status === 'streaming'; - } + const [input, setInput] = useState(''); + + const isChatLoading = status === 'streaming'; - async function sendMessage(e: FormEvent) { + async function onSubmit(e: FormEvent) { e.preventDefault(); - if (isChatLoading()) return; - chat.handleSubmit(e); + if (!input.trim() || isChatLoading) return; + await sendMessage({ text: input }); + setInput(''); } return ( @@ -139,17 +142,13 @@ export function ChatWindow(props: { className="absolute inset-0" contentClassName="py-8 px-2" content={ - chat.messages.length === 0 ? ( + messages.length === 0 ? (
{props.emptyStateComponent}
) : ( <> - +
- +
) @@ -158,10 +157,10 @@ export function ChatWindow(props: {
setInput(e.target.value)} + onSubmit={onSubmit} + loading={isChatLoading} placeholder={props.placeholder ?? 'What can I help you with?'} >
diff --git a/ts-vercel-ai/src/components/ui/button.tsx b/ts-vercel-ai/src/components/ui/button.tsx index dfdf351..b991a69 100644 --- a/ts-vercel-ai/src/components/ui/button.tsx +++ b/ts-vercel-ai/src/components/ui/button.tsx @@ -5,7 +5,7 @@ import { cva, type VariantProps } from 'class-variance-authority'; import { cn } from '@/utils/cn'; const buttonVariants = cva( - 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer', { variants: { variant: { diff --git a/ts-vercel-ai/src/lib/auth0-ai.ts b/ts-vercel-ai/src/lib/auth0-ai.ts index e23941c..38894e4 100644 --- a/ts-vercel-ai/src/lib/auth0-ai.ts +++ b/ts-vercel-ai/src/lib/auth0-ai.ts @@ -1,15 +1,15 @@ -import { Auth0AI, getAccessTokenForConnection } from '@auth0/ai-vercel'; +import { Auth0AI, getAccessTokenFromTokenVault } from '@auth0/ai-vercel'; import { AccessDeniedInterrupt } from '@auth0/ai/interrupts'; import { getRefreshToken, getUser } from './auth0'; // Get the access token for a connection via Auth0 -export const getAccessToken = async () => getAccessTokenForConnection(); +export const getAccessToken = async () => getAccessTokenFromTokenVault(); const auth0AI = new Auth0AI(); // Connection for Google services -export const withGoogleConnection = auth0AI.withTokenForConnection({ +export const withGoogleConnection = auth0AI.withTokenVault({ connection: 'google-oauth2', scopes: [ 'https://www.googleapis.com/auth/gmail.readonly', @@ -21,26 +21,44 @@ export const withGoogleConnection = auth0AI.withTokenForConnection({ }); // CIBA flow for user confirmation -export const withAsyncAuthorization = auth0AI.withAsyncUserConfirmation({ +export const withAsyncAuthorization = auth0AI.withAsyncAuthorization({ userID: async () => { const user = await getUser(); return user?.sub as string; }, bindingMessage: async ({ product, qty }) => `Do you want to buy ${qty} ${product}`, - scopes: ['openid', 'product:buy'], + scopes: ['openid', 'buy:product'], audience: process.env['SHOP_API_AUDIENCE']!, /** + * Note: setting a requestedExpiry to >= 301 will currently ensure email is used. Otherwise, + * the default is to use push notification if available. + */ + // requestedExpiry: 301, + + /** + * The behavior when the authorization request is made. + * + * - `block`: The tool execution is blocked until the user completes the authorization. + * - `interrupt`: The tool execution is interrupted until the user completes the authorization. + * - a callback: Same as "block" but give access to the auth request and executing logic. + * + * Defaults to `interrupt`. + * * When this flag is set to `block`, the execution of the tool awaits * until the user approves or rejects the request. - * * Given the asynchronous nature of the CIBA flow, this mode * is only useful during development. * * In practice, the process that is awaiting the user confirmation * could crash or timeout before the user approves the request. */ - onAuthorizationRequest: 'block', + onAuthorizationRequest: async (authReq, creds) => { + console.log(`An authorization request was sent to your mobile device or your email.`); + await creds; + console.log(`Thanks for approving the order.`); + }, + onUnauthorized: async (e: Error) => { if (e instanceof AccessDeniedInterrupt) { return 'The user has denied the request'; diff --git a/ts-vercel-ai/src/lib/tools/context-docs.ts b/ts-vercel-ai/src/lib/tools/context-docs.ts index 48023d7..8f9bfbd 100644 --- a/ts-vercel-ai/src/lib/tools/context-docs.ts +++ b/ts-vercel-ai/src/lib/tools/context-docs.ts @@ -14,7 +14,7 @@ export type DocumentWithScore = { export const getContextDocumentsTool = tool({ description: 'Use the tool when user asks for documents or projects or anything that is stored in the knowledge base.', - parameters: z.object({ + inputSchema: z.object({ question: z.string().describe('the users question'), }), execute: async ({ question }) => { diff --git a/ts-vercel-ai/src/lib/tools/gmail.ts b/ts-vercel-ai/src/lib/tools/gmail.ts index cb717f7..4bf7c13 100644 --- a/ts-vercel-ai/src/lib/tools/gmail.ts +++ b/ts-vercel-ai/src/lib/tools/gmail.ts @@ -16,7 +16,7 @@ const gmailSearch = new GmailSearch(gmailParams); export const gmailSearchTool = withGoogleConnection( tool({ description: gmailSearch.description, - parameters: z.object({ + inputSchema: z.object({ query: z.string(), maxResults: z.number().optional(), resource: z.enum(['messages', 'threads']).optional(), @@ -33,7 +33,7 @@ const gmailDraft = new GmailCreateDraft(gmailParams); export const gmailDraftTool = withGoogleConnection( tool({ description: gmailDraft.description, - parameters: z.object({ + inputSchema: z.object({ message: z.string(), to: z.array(z.string()), subject: z.string(), diff --git a/ts-vercel-ai/src/lib/tools/google-calender.ts b/ts-vercel-ai/src/lib/tools/google-calender.ts index d3a87a0..d5f7d70 100644 --- a/ts-vercel-ai/src/lib/tools/google-calender.ts +++ b/ts-vercel-ai/src/lib/tools/google-calender.ts @@ -3,14 +3,14 @@ import { endOfDay, formatISO, startOfDay } from 'date-fns'; import { GaxiosError } from 'gaxios'; import { google } from 'googleapis'; import { z } from 'zod'; -import { FederatedConnectionError } from '@auth0/ai/interrupts'; +import { TokenVaultError } from '@auth0/ai/interrupts'; import { getAccessToken, withGoogleConnection } from '../auth0-ai'; export const getCalendarEventsTool = withGoogleConnection( tool({ description: `Get calendar events for a given date from the user's Google Calendar`, - parameters: z.object({ + inputSchema: z.object({ date: z.coerce.date(), }), execute: async ({ date }) => { @@ -62,7 +62,7 @@ export const getCalendarEventsTool = withGoogleConnection( } catch (error) { if (error instanceof GaxiosError) { if (error.status === 401) { - throw new FederatedConnectionError(`Authorization required to access the Federated Connection`); + throw new TokenVaultError(`Authorization required to access the Token Vault connection.`); } } diff --git a/ts-vercel-ai/src/lib/tools/serpapi.ts b/ts-vercel-ai/src/lib/tools/serpapi.ts index 8a25604..96fe942 100644 --- a/ts-vercel-ai/src/lib/tools/serpapi.ts +++ b/ts-vercel-ai/src/lib/tools/serpapi.ts @@ -7,7 +7,7 @@ const serpApi = new SerpAPI(); // Requires process.env.SERPAPI_API_KEY to be set: https://serpapi.com/ export const serpApiTool = tool({ description: serpApi.description, - parameters: z.object({ + inputSchema: z.object({ q: z.string(), }), execute: async ({ q }) => { diff --git a/ts-vercel-ai/src/lib/tools/shop-online.ts b/ts-vercel-ai/src/lib/tools/shop-online.ts index cbce5e8..700ad55 100644 --- a/ts-vercel-ai/src/lib/tools/shop-online.ts +++ b/ts-vercel-ai/src/lib/tools/shop-online.ts @@ -1,13 +1,13 @@ import { tool } from 'ai'; import { z } from 'zod'; -import { getCIBACredentials } from '@auth0/ai-vercel'; +import { getAsyncAuthorizationCredentials } from '@auth0/ai-vercel'; import { withAsyncAuthorization } from '../auth0-ai'; export const shopOnlineTool = withAsyncAuthorization( tool({ description: 'Tool to buy products online', - parameters: z.object({ + inputSchema: z.object({ product: z.string(), qty: z.number(), priceLimit: z.number().optional(), @@ -32,7 +32,7 @@ export const shopOnlineTool = withAsyncAuthorization( priceLimit, }; - const credentials = getCIBACredentials(); + const credentials = getAsyncAuthorizationCredentials(); const accessToken = credentials?.accessToken; if (accessToken) { diff --git a/ts-vercel-ai/src/lib/tools/user-info.ts b/ts-vercel-ai/src/lib/tools/user-info.ts index 4adda15..b322f91 100644 --- a/ts-vercel-ai/src/lib/tools/user-info.ts +++ b/ts-vercel-ai/src/lib/tools/user-info.ts @@ -5,7 +5,7 @@ import { auth0 } from '../auth0'; export const getUserInfoTool = tool({ description: 'Get information about the current logged in user.', - parameters: z.object({}), + inputSchema: z.object({}), execute: async () => { const session = await auth0.getSession(); if (!session) { From 0d6f4f292245c9d513b13e484ea3b84ce0e94a53 Mon Sep 17 00:00:00 2001 From: "Patrick M. Riley" Date: Tue, 7 Oct 2025 00:57:19 -0400 Subject: [PATCH 6/6] feat: update ts-llamaindex example --- ts-llamaindex/auth0-ai-0.0.0.tgz | Bin 0 -> 69902 bytes ts-llamaindex/auth0-ai-llamaindex-0.0.0.tgz | Bin 0 -> 26691 bytes ts-llamaindex/auth0-ai-vercel-0.0.0.tgz | Bin 0 -> 31210 bytes ts-llamaindex/bun.lock | 181 ++++++++---------- ts-llamaindex/langgraph.json | 8 - ts-llamaindex/package.json | 25 ++- ts-llamaindex/src/app/api/chat/route.ts | 88 ++++++--- .../TokenVaultAuthProps.tsx} | 2 +- .../TokenVault/TokenVaultInterruptHandler.tsx | 33 ++++ .../components/auth0-ai/TokenVault/index.tsx | 28 +++ .../popup.tsx | 6 +- .../redirect.tsx | 6 +- .../ensure-api-access.tsx | 28 --- .../auth0-ai/federated-connections/index.tsx | 28 --- .../src/components/chat-message-bubble.tsx | 149 +++++++++++++- ts-llamaindex/src/components/chat-window.tsx | 40 ++-- ts-llamaindex/src/lib/auth0-ai.ts | 31 ++- ts-llamaindex/src/lib/fga/fga-init.ts | 3 +- .../src/lib/tools/google-calender.ts | 4 +- ts-llamaindex/src/lib/tools/shop-online.ts | 4 +- ts-vercel-ai/bun.lock | 7 +- ts-vercel-ai/package.json | 1 - ts-vercel-ai/src/app/api/chat/route.ts | 12 +- 23 files changed, 414 insertions(+), 270 deletions(-) create mode 100644 ts-llamaindex/auth0-ai-0.0.0.tgz create mode 100644 ts-llamaindex/auth0-ai-llamaindex-0.0.0.tgz create mode 100644 ts-llamaindex/auth0-ai-vercel-0.0.0.tgz delete mode 100644 ts-llamaindex/langgraph.json rename ts-llamaindex/src/components/auth0-ai/{federated-connections/federated-connection-auth-props.tsx => TokenVault/TokenVaultAuthProps.tsx} (95%) create mode 100644 ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx create mode 100644 ts-llamaindex/src/components/auth0-ai/TokenVault/index.tsx rename ts-llamaindex/src/components/auth0-ai/{federated-connections => TokenVault}/popup.tsx (93%) rename ts-llamaindex/src/components/auth0-ai/{federated-connections => TokenVault}/redirect.tsx (85%) delete mode 100644 ts-llamaindex/src/components/auth0-ai/federated-connections/ensure-api-access.tsx delete mode 100644 ts-llamaindex/src/components/auth0-ai/federated-connections/index.tsx diff --git a/ts-llamaindex/auth0-ai-0.0.0.tgz b/ts-llamaindex/auth0-ai-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7198fb3c1d1cfb5a22975325dab1195044533225 GIT binary patch literal 69902 zcmZU)Q*b418}A+4ww+9DW0Fj4YcjEI+jg>IPi)&-;l#E%G1i{v{l2Pwu=}8^Pr9n> zuIj7)_+6wiaA5ztFfV)jJT|x+d3`~^a?!_)a;@_;t5-j*-tAf@#wd48ftK8-r?L(d z1#ujk=p~F)VxC8j03Z?=2AG(PyXlDHxXZdWl_5;Xz)x0=O#H6xQXerbqsOkEp_J_a z!Qn;gmR24f_>T?img#^Mo@L!{3+t=v_BAzj4sG1mtU&W7Pb9l3%rS|uvHM7@K zM4OmiVp9vZ&u9zJ1y&yBDZ z1tzyS5k8^oo4zof*}NLQP@*|8G-xX{>1nUrmt^Rw~MKDJo*s9Q=}|sD!X>VMP4P+9LKfuml0TAJ-qITn{Y1J#3KsL080EYx*n88w z0NMPsa1w{^^x{ZKEww*{++Legpi8-eMs`-DArJ$`0kVQ$Ge(xzHgwC77 z70+%*4{@%gBK5_L&WGH`h{v(5u0%!FV+}tUDRu&zqLJz!zGb%jj)@y>2|2@;f-9{B zAm^|QtD8lCgv==6Iq+@o8=f#To;MnspdO4CgsEVleI!eUL<F&GVKh z+X05Pf+}E+_z&3PK6WYj%8h-u5{pF&WE_vm2C%6E;WRlch}PQ@3}Oj4_DnL!^1G1A z7zdAzB~V3=WCZtp;rIvXA+q~OV76KHE|*Xjc!Q1rb5&rpsHa@fY7GQ%$XgG*Nqzg@ z6{|bV>*-hP=!#XM@jNCTSy7T+WB^dOVu#`BI?T>Gzz~@AdwUE_I|v)mj$gg?P7SD3 zu7@zckQW+q$jrcm9lnMDrxm0e{A9cNnRGtECV{pq+DXR532(RV+ zV+Z5N62R!SLtm_tV7?z6;8yU)QgcxACOqRgh{53bTAS@<&H)+SovkJ=u97m`0NP{l*k!MBTeNR;GUKv_%D3CdFhxjd27kjb)wSX2D2Z#`MGu05;fI1v*;CIOU(Vd8(^pJ53U6s z$>xyPS6D)B^RV+%Nn|9s$WkUNCs0HP_sx4J#l+1AC|Rb4&z0iR9%MRnkrgmZO?y4r zZjm2C!+oDK;~{KKjT)Z_bw~|nuNjN8<*VFG@7zwLizM%-0y?z+4eNTZy9;e6%Zjt& zcal)FU2(#ATLJ%ps6te;tKYPX5K!wW!P60FqTqWFel{~nR@f{POjW4W0E@J~nl@61 z#GgV-z79ohkHo3BYmzLJKzm}m8^$A=dN9{xb?h+8xwk?RSAR#WVkJV<#Ac7cs2`UvE^-Z0OjoXx4r;>P%F7h1> z8c?$n#0&Jr!IT=Rr~e|29d$~+pBUHdM6(U!jIa$&fDZ?rNIsp$kC78W9ME;|wL=4` z`tQYg@Yqzi3721y9mGehM$swHRYo_d`nh<21fPoM@mcnJu)A5U=!CQz6R9-xdEK1~ zMzX&WGG<}FD8FQ>UFKLZg>n$H&JS?O2X1x{Es*xd#xxVfu1LyAx+! z3bJ_LCN;Z##qAFR4~b%xJLMx%V^sLJoPwlD&_<#Y$AWynMIp;ieg_;3iHG7JH1Dy~ zTff?8C+UVS2JXGic;pFfxWe(3{ZWl`kraR$~)fBs~* zcJ2g^qWTfhu&VPY!L$=8*RIYXQcXrdMIJ|Y)Wjb-#M*n@)qE&-WwF1sxJwDBPt^x2 z0mBo)q*_881&0nViT=I6q=^TJ+1yTj^l)N4^vh-Rb8?emz8{2#Rh-vPO9pG8x}%E> zqj=%l(KAA$|YGdK$}?QNs&LX+b9wky3Gy$Hc=Ti>oW3(xA3> z5oNIcfMLzG)f{O+ENgK0bX~uBvZg8}RU4*fBA@4m8xS8#tHUru*R$*m6ak=0vPeY9 zVVu8t)=ou5>L$S=jX)DyjXH-!)>)x&Lu>+Ief0b5f6YY;Q4#Y{le^&)8C&|dYOJjC zhMJh`1s}_{JKG*--cpBTFW=No+H)oEF{)_oCjLx(fLtAAzW1wKbp~*12zIIhRsTwe zqqO}rNmSvp-`C>Y!%RX688!+c-!k<~5G}?I=c(^d<8c~4OU!o)?5l`WH%I4j@MoRD z`ek211S=+-NEV45w0S7CsA|Eq`RMl|5R?)stEXxc9*7`6EitALZ-n#0xxp#+6%ucG zs3fJzx{8-VikmiAbd&^9Ctsy_FjI_%E^Cl#*g7Uw8K&zbu2m^ zbHeikCn9PP8X+Td1?MRXEvxXx;!>)#mX-z1>gW)3h zS*eArM>rv9unR!ne?4T9+WzD-+y#fn6AB)oG0A2t!0+C@^5bc zK}UN>*no4ZE+L}IVlp<)%<-M-@1R2a<8bPM7;NtqnlnS2AB?R+lENn*pV8!q_Q*Z> zDb6tkGp8fYVZ3N@stkGodeH>7Wz)zkFL|(`m$6I%#=5*Snsj&Qmk$OUA-rt^Q@mr! zhzy{flO!k(n+%>pdB{`7k(ox+k#kN5hcnIj&v*xh@8;lOuEnf-e>4HBU|=A)v#7rl zX8)Li)HQzQ3D3uE#EAxP#dui!L-<&rzQocrtxUCjdWa4z?_OpN>CIAO0dTRb30#+y zhoS`tf0n;A?tfAeFsSk-2l{(7zoB+7ckPu z&hpU!i@dmnKIDkkH=o!i#>41fh&WJ%<0Vn{%oeKIqX~AOUU?eFYY3$~~l4l3J*ZW|2L%Sld z-r^KxhE}}EMQ|$Gv!{hNFPAta|CYXtGz=YpjuTwBG{@N}D_g)?Ps&O)I3X0WY#Q1n z3i}3i2?4wj*JA0C8*m2B_1YN016Zu}Am~_LIK#l*8Gv)VS=Zw|b1f^%TG>r5L)?UF z^(YpaOZ~87DU5Sse|I|-Sb3vps868nQZGsi>J{3zaNSKBPJ%xd1?ebIXz@|AZh6G0 zXq5LdU-7$y|I{*)2ZKkj(ay&3KGlV=u9O>Kq>mmnAZBx{uF!(r_ahI=40_=55Xl$m z^A3Eg*=++`cOX;8M(tLcBv2^fN6S#a#%@idPc{HChz{+DwiB}AL=MQMbX#tEJzYAW zkQ1Z62*w&ZtDm-{IJ6_Yg4m&gbd6Fw@oj(e$;ifUv&MHQqHzU8ci^=o3{yi!e-z2+ zhXUgSCkIGfN(**vd48C=Vg(U~rsnanOTcqQ%}NxOiglP^uOj^Ty;+aOy6HN6M)Nb; zIE4Su%omv!!{2fWElgWIdqz4u4_77A3dHfMoe8d-MQ;chGmTF*7@aI@&z0!QzfwlG z$jn*n=nW48xEU-uwjpq0N8`Oa3zQOO5s8)9DdKfcL3bvgN3d8;k#kR`>friesbnx} z2{HAZ4l76U>g+WR4ewCd{^ubd4M)SfZlRFm>eQ}dp3ns`Nk5F$!|2<>m(8CCuUYMv z00<+UM}LbdODiRsgVY-LRfR*h&`;bIJtKcte~X7_wk?oLO-pM};d?-Box_c-`d9vx zr*%F3Q2Ksp%a(;cNI@jOzC_E^^y)D*soFr+7E8810;-^HuLHz!nvw4R}qLudgJ1@+@jONF;;t4VN zHDf@pYu#xMJR!-bRc&6q`(6<8d7xBK&kVgy*kw``@2!l@GrqMC9F~n){_OI2UMj~0 zmxTsM*XB}K?{hE0;t;m+Cit4db;LYK2%|rpG63n`;DzMX%>N%?+x)@ zW;H}b@2J#Cl{82pKE^=UE)rtXT)6D`#Nfj_CkIRrzu6Sa3nT6;HwgQ6k+Fxs~5Cgu?q$% zyT&5MU%k@#`3cminYUbJ<#x>?yN2X(E2pp{xL}qK zNv%^H`4D_+DzliZo<O->#LxcT8v=Yn7oW2^Uw64HHNs81#HldGKSuS#gUxq;M90rB^l|K6mmLn# zJy{9d97xckV^K980ejazx5|jW67a%KV4Y*%X{K`H>Ne5p2k7V==4$zKF%St~9hH!r?x?Q?~;nGFd5)XIq zj)46f!p)cT$B-#VH#u4|&4a{|P`H)O-gJebS2!+Xf=umFPQN#BkC8k~kd_U=uMYU~ z5=myt+b{Fyky!}8V^0?Je*7KqvS01t>+AZ#8fqodFU;%H_?US;`sgQs7)=#N2pZgG@#Wye>tow-dV{@ z=%ZAE5_n1B6Z}O`US5$D?RlN1(L+n6=45%zLcL&j_)$ZpRGG3wDY+K`LGoDT`W)N^ zy$vse#>jqNFh~jKhTOP{naom>k|{=2^s@hmAqf8jwCruO#S3z9(EJja^1?X>ahxzr z!5?pEnge~Wnxbx$BDoM z-Q?x58i7U4#xzYEL3X~Wa4LM!=02EFS-J9>dg;WYDRYnFvYH?G`<^d?gQtD<_o2}P zfn%RLlon(S*L@wAnYNR7P3bExw2foU-{P~~%j)Q7FEOMaI&|R<58~soh9h}|c_mK! zhRTahoywv?d?l_(se-?d8=pNe=56j__ET7O>u6I)_OM4#W6R11B1coyd+n3aLu4j? z0Hkb_=Ze|l-oB!66RdIvKv`l>AElHB&Pz6TnNmSUkb@^XKXSTL9CC)8h`!!F?d>1Y ze7T{a!IvK;$HGlFrm5`Z$*E80T zpH4a;JHNksft@h)B4$5PhT|f?!#>J?c&d?c4Aduk>X$%LWw(k)y-h!Ww?)l&rlCNM z;X!m+a=9^IN9O)kk!DSWN2@Zl$7&>-j>=icU?yC)sY7kGMz&xNXVrA$w&nGA6w}eI zLp~eJ4#zY#gNkczVx#zLvUJmL?zdaE6t#ch9a6ndME5;;GjmFsv;Qpq5*=5gf{%cB z7biG|7oQ3`)4fF#n)z?-F8qi4GJdOj`dmOhw11PbD!!WDrwUV65@4a((*x)G$i1pw z6;?*w-$4YK&0{gAdX7M}kVO?9s+&$oARBe zH9^&Ay4Vf`hh05F7z%@EhpQa80nX^jA8>serp14(d98edfrM_5vXPcV-*GL(5w~d` zn_PC8eH;E9}+lFP5N&hhp!6flNV~M`>7A z!}xhfo#9AI(lX+beT2K~gAE_@02SOemtb-p6e^vlml%*oL>vtRsD}Q@tQiSbzJ_AM zp6Ppc2FLrrVJq%{a`O#uQ~TX=^=0>*fv>FiCHlDMfie?=SV`yIiG(5dkT8^YUo4D7 zU%$MX*-+(YrV4yM0aIQILihf*}k_YQvXTVaURb^q0 znBzPjE~eP5iJI}d)uM`f?bg11VcXNQP>pqK-Ino2<``R%p+N3bVac-kKvrk*rb4vx zmlUF553iskr=`sgHpwtO$lAdP9XO|TopqT5IfC4|zg`##ihDQm-|MEtR;dX}v#bV# zG&skhLWEQowTf?vI%0fT|5%7UmC8arD4Bz6y_5Y>aXQ+Pe+du(GkY&J&dp@z$PKNPl8uXJ9OKUPKUoH!^t_a!Xa zT~LSO*Y6=wCQ$kC4hT>#f1^Ig_nJPahFg5WAPfHrK`V!82;vtJBwg$FZTBA(l|(0o zGs>(SnjUjbZ){5eb%s^!lT$z5s6)p{CjGSK>W0n_=Pb?jWxp6{(iTf2cNN2d{;lQ- z`*$eqJAypx)s8U-&Ex~uPRJ3`pk)7eWZBRvtu3CCIB7AUGxG&ea)?R&TjY-741=L_ zzlfD?!w{yk+|!FC!l^3I5gOYN@|jIA^5d13Xys`sB=V(L0jM8g(pLMte)!(vTgYhb z4C1^)eWi99+mum&DotJOUsB2yMj?!cm*BaVknJ~+!5t$i9tqebhtWY6sZPXRm{4G* z7*V_?qFuURN5Ov@GgcwUsF5YpVlAjs)f~*#O7s&QxPaORd#5(*aM|LGQadkwB)TnQ za@ZRHxL%Gy8z=N?#A?!w0Ft8ApVqZ`Mnb^as2GMEltTsT4Kx2Ass-uye2Zk_p>6U8)C)yvZhr3jzH9<6$M}0QO4YI;? zke1x!0=tdX;UKH9C^5ft$JvvurP--bpZJ5^hT;q)9l}og$sA##V1h>B65b(o{~yR4 zHrh#n#chPaWsnN&V(mbUE|Rx6=*q( zJakb^ACjjs@ z-veYq{a~QX&d|O=vn;ZTRlb|jgt7E)#!JImu`Nw@ zz2ihcoV6`2D9ccllRL4+{!><7tDEOz#aN2y6Nn*Kaav^HWjT90$DEMW3?^+?74nqg zJnbL+wVFowM7&l1Ky22z;dW$OBb?UM0_YoJ7Iys@ey7@TO2auL)xg3o%`Mfg_XW{O3>31-S6m&Ts zW$Sm)1aQ?(q!HdPI!P?sQYS3mXh+=JxO3J5q8ZEgCo9{X8CnI?)SQmgyMIDd0;2o) z%l9Q;(Y0!amhUubhnluEYlqTuZoBOVW1e3%@@L~fOx0y-LV*^e0Xu9DBKCGywwhmk zQ=aJnkQjL;gZGDtr|=3W0R5t`rAbF0wDIT7Xw;?r1NG1O=XsvM4M=j$&Ya;C|02N7 zZ)+OV+_Cuk2~;YGxCJ_j`d1@}VzxCZ!bEBDQeO5mqpF1mkJcoe%_j$YW*v%4F;P+2J6+x zWpE*W857rWCx%IZfuZ+Zc(G-sXtbMp&dF40VFNM6k=}!n7&d)oslJ)vN2v8Po5PqG z(tC03e$YI6^@2Att!aEp{`}Y(V)pY1s!#D@d+R;pcr+dpR%%+Cl%;1UhVLa6-M2le zL0)epS&(GNN3S_WHAH<18ye+>_UjfhLacTymb#e>e00(-X+07KX8YyeuJ(sNot-#{Z5 zAl;1|$!n|oPYGCTEssZ@rp1GY$JJj z>;CL|=ZG)&H|56P`BVh%Y)8E!lDH!_o?8IC%4c5o<2z7Y8vWFLG#;70{+ThCyq@SF zGLDm@*Jq!HtQOEsGk5GKsc&%AX8`_e$SKHeP^GzdtxLkA6%Q3iy;LYjR)qrjnW-A7JQ7y;%XB#@mg5BfS!>NyzG>E+Xg-p1D4L4n zkghKS2_&BY?L;9p4q0P{*NCiHm0?#Y$Pl8MOyvqtmMTsqjrkrMQEepzAweMVr;~a; z*neio39vRW`}0(GwMouduCq&zOjS)q(#&|Pu_7@xl|B>(7%`8^K zIp-Eh_*u2{w>8PB>IH>Qp|z!a`ZvHGOTbHrEbNdn?wuANAsVsXPtyg z{(d^@$%1Ak3^G!B^22q4CQSLixd*(?)p#qxsATUcL#0qQQ+hpWAtN~Tu|3E-JJkn< zb9CR%p8Q6=r=ld@4V~;^7gdN@R-9)ObM*K zO^Q;Rc(F&7L2M@XOzF-fH%*+FM$Y1i5cDeu@fNiFCY1!zddn{r%>FQPI;hJg)Vgf; zo<51cGny74q_{o(D_r&fdYrlX_V5Kd1_Cwz8?>kQB8`t6*INOiunPnDwpRVs^JV6~ z4uPNFre4%YM|7MOtk8-6|HLDolx%|E*D^(^rZez1$S`E80s!x2^(4< z+i)j|Y#{D16lypBELy;^@uaIzG8m|NP~<2G)>G=@ztF?m>&qBg_^=ck$1X;#z!!LN z>vR$XD2L_M=8CB*7_I-*`TfA+H6cR~+Uk63h>x_wh>h@H(vgTA{kgx8V`7#|57A7#5H%pT?n_3$7LR@aU#sp4-DvOqKXk0 zwR6OdN$@^G0~< z7EAWHrr6(!Z>v9A5klnXa$@O>mx#ks8*amg6K!=_@K}Q@zg4mrM0lfjB9bHYPe=?J z8=4s}G|=smj#6E^*z%k;j$dRLt^hOZLI8d6991##JAD=|nzDE7mR%IL6h2kP6LL;!r9K zZxam^cV?d?I5fe7*+$FABa9?e*W#SOu+CFRE{KBUg-nQ|QIr6nSczj0EHLuO4t$P4 zN8r+i=uipnW{Td_axXZaKsYRsO;P3%COHv>f4l*q`-rK_wG}>T2qez{|6`0O2}g_Xk>YJO#asF(%qlMrch4@NrYGn z__(#U#6Q`{;2YXMlL2Ao@4ohLVVtWY)h@mm@30T<6pNFyX^H48bu;sg7`lClLDiWX z)w%d`t~=~w=yviGIl_$Oxo4P`G-~K=ct?3>0D0gmvJf_lf(hI%JG>M#x4Y0f%}pw& zqxX8-^IIUZrMLInZ-u22ruKsh>CQ`5Ie#XvS+$sT)T*}QK*Y*C9Fbo_jP(th4ohIPnD;7cc*o%2K%Kt-Ca}<4T9@QYa}cTW9Z=9KcS;)LA+&R+u;+ z9%wzH4sjAU{UhUygt1pguOg&UR&l!4TE_4BYA(Q<;!4#|lG-ge&xu@J>{SpKmKP>v zR7Gnhh|cppZU})lPH2TVlKBB1`>>q%B@q>tI=wBJwSp1N*_ufS4~P31Qn{2Bm5Nqr z#*Y)G+Cq9c1g4i0W(J=CPJo?{Fp%%TPM6KAjR?T;U_$^M4-``klUFg_4R1}gp=Ks zU{_iI(k3;zTvO#zd$zkQ%+yhz9G^3+p_<%aC|x~MRdtjV$d0{^FFG;P)Rg5Cidg2! zLw=hShW~xzg()ih(|)FCe@#cdb0$kc3!k?N3Gi$P9>_B_$sjRfP=3Nz`T=NtR8(=S zuFWGMCb}!;skqv;9Hud;PgTkP&M6vq_lle+nD7Q`Pzi++^6(EnObvhOqkzNI%DZoj zFD%KVB449adnB%6`#2mp7smR-HcBI0P{~uRlsu=df2(Gjv$Rc=3n1tmB6su4u5S&) zv8FqaK11N`URp1q!CJs$dOnzZe0-cFQYBps=i3mB7@NanT@jU8`O%C2Z5il;3gzm4vJ4 zJ9)mI`UwmqUDxc9hm{lKnL7jlUQ@kf0+&&zQKzDqAhC3toFMTqx%=@Ou7MoKdZzSR zz&}_XTecU_1s1Yz?oyTgz`>Wd>4dr|k0gP9o6B8Pa273a#G88PekM=<1fKVT0>nC= ze5nDfGgto8)nV|~dTnimBb~w-zSLiwGKw9l)7sJ%#2f^y0w1@V$YirF1Sxnt4#qUL zDSf^e$UFY^1eu{jV(dPj=_Ac6`ka$nxrDotI&<>4Pw)3V>)z^sMl(WduEvZUfqQX( zTix?&{z_=TVH{t+_c2;C2+bm9R!~bG7k-|tgxQ@bJ20n`jAqH&pkt4SCb30RLc8Kv z*GDbXg0k4tOW?Im?-m!XvXB^%VT&A7={Pa?;;I!li~fH$^kgE6u2`ur4jX*`%2C^fz=nt1l4~1_PaUd z;ZJq-`P1)IroM!tF?=ndpK0fsI&Cs#(MZP@CKo)y8RK6w3%sY2(t6N_X96ZmIR34& zVykbl;-{unSo3xFjAo_zHPN(PP1(9JU0V!p(cqg+3pn|DrN5%u!h+dzHtdev^t`q- z4cm;uR%&oMoC<+$X^U5Fm#*(KFYB7jt@%g4a-teg&lLnD#r>`0o2W7Lj!521woDkc zw25n9^^HlZHmck=-vvdqdMYOyTAXdac`=MF|KBGcFi-`t9`4bIZb!B5m{vzM&|9yg zT9dgdZR+>EI&+oMoY|wwd%3W;#Zvjcmu^RvFeAjRmwj0&5G_rqa(&mpPZoDiRM#s; zSkXb{Hbn;zVR_xAevC5dSJoQ}Iw^j71QY@M8GyM)n@SIbd9$&g$)gW^k^+wXfVO3K zdC+W4T-+qcg??82L1el`mOa@^_2SURPk0gJL;jz|*3btD{AaN#yYGb4!XoN4Z&p4x zeLy0>+1jSJ%q)=A)HJBKqeG|WpUFl|22~E5#9pSoCWAka&vMk&WX5i?iMVTjoS0Ip zuaw_4Q_Qj})w9#K^4|7rPFHm{TD>BRR8E@DSaqGw*O(&F`wE2+9XNVgVR-dQ6RJZj z+bWO#zP&w=Chw80-L$t+HiHJ^|N2)QtsK*#^(X|pJAvt_P@_kGLyVqR)rzfN{Uv<* zVaWiq1Dr1ad^XC=EtG-9-@DQ@wK9f@Xy|FYx;VT#1bqa|OoKZAee~Av7Z7_M?0%Pc zb@i&lh(F`gduD#{hsaUwx!(gga2K?Zc&Tv$s+oC|1-1Rt`G+9?&BiZVGYo{D1-B(2rt96fH`wyQ3){k6%FPo4{nX z|BN1gOq4o34}Tt+zY8&|b$E?)B>z^?Y-41Y9IS9!rfmDmNs6^%c|D_ejy-96I$F!1 z2;P(7e3Cch@$>HET&yALg`1#Hid|4o5A&!(Oe@*y>qxY5wNp#E)8nQ?rr zh>7O0$;|`Sh95Ui#W_~5ke`?9CTIs}1vE1L8J=12kk^i=pY0Rizs`g&y;W;Pb zd#9tue|(RGFDkozkI!D32Yq?#k;euZE;*yEQjp_xV$7|6#Nqz;Tmy7FqVvy&pT7J9 zn&L-&?FzepE2bNS`YoiW)1>L`+z2=Ia?=(EyttfbfOaoOoK9|=x&MS$K7R#{wk=E+Z zP_xAeM?WhM?ra2%{QaZ{?q9vLX$QwVQged$UKL#vE^Kcr6b%XNZ=At=^m+YMVatO* zQEwKv^p@I$ISxT_k6c3_4?9dlje8JA9&7_>4M#n}h~`_{+CZzo&=XJo#O&qS|BH4U zQw$&^(hp{Qq~n7jVo;FTop)H1pDlaWk*uc7V6??A#`c@x81&uSFw6jw-zS?X5RqgY z1HKI$R^MDb6gkh9%EvG4>2s7cJuf&=Qz+8ds}t<8+++Rio5}z!>)BjLzB)7|gVOI( zttUx>^d<6|yV><@o?Z@P=(CGinDJBh9-J;8)i}iye*M$tJLe5TYBvEW%=#}%hmM_X z@~m>8rlts6`;Ye5gWHo!C61c8Z({68hfhWd7HTPRvIUG7mg7(g&7- zApR~Xb=zX$#DJdpaMG+sLk4YxYlmY53r(OBgY>swE^3y^L zDs;+=zn`$+hRw)xxMae7Lj2dckEqT+Qpc6dIc4$tRfqd@1xvg;)A@>-oGTDqLbN5l zRVY$=jwgsc%O`z=$gpQ$jAKU5;vtcamo03?F^7j=li8dM!=qdxhOSOUb2{3oL+RV4i-LsHFTgFt^1vS zV|gAV6fo}q8(XUDyX1B6Zu zzWK-_ys4lxB$YXfJXyw3qIX6jE675 z^)lk|*D(ZBGqyCj5(}m@JEP!Izm~0h&rdW{`n{+OC@|Obn|D%p;tqINWapUUOl;nu zj{~}YomSyQT=FX?PTWqSv2QL{ejH}9`;a49H;;C?zC&hQ;0Z4-WN0vjOM+4@L`Hkk z_k^D>b3~kXH~)4V!m*mteI$4gR>#E(($dLz1fa5lKPpaYJ>VV7BnYU6V=%8}8U1!1 zbmUC<`tG27qfNr=V?NG*S%M#UNHk9W1r?AQMEXDl1iajWFZRYbszS;D@cAXD-FXc^ z!0_$ZV_Rjm5`^S$=tb_~lI|U&X47!p!8ZXv`Z0lImyrqU!23HzL5X5Ak}wP^Es z3-MV#dRDGV7yGj!rOuoIuQY{_*?})d-AK&gXgG}T=A3{a>8Bq(f0lRyNAl+Ah#0Q2 zBKG8W%i3jknX*ij%pK4WNpcrL7zxDgwZ+^WUnxdYDeNoq#pN2&Bs3Wt#lMms7i5?- zOJk#LgbbYI|JzjIDP50F!*$hms>$YyY4CG1)ErMDf}Ay}_9wEy4E<(;!DMHbGn0dn zv)ozBvWu}o<#aS>Dr`FOZ&qZ6{z5rIk=O8)cuD?imqN2qCVWgS+CL`ai~Z6sdxUgO zpD`lD(=f*-ecLQqXi3HnCTpFRNK!XsyO98M)0c#X)`!KwSqdi0u`d(h8k#{zgDbJ` zjI=;S2`FQNr4m5f5+_Zs9pl7@jt#nzg~v}gT7qcF><7OY+T?*(NC`Al!59%XYtM(@1aUNet85yH~b7HB{*+q)2ABgkC#!nOt1EMPF$ui}vCWj#{6o z?pw^9;>UYrsXC)t%J*zG^bkUw(!J-8*%WMNewN>k$_e{s#+44j?NPxjjn;DeFkf;O znq@O~!&4{>F<;JBv2sfT=);)oD|tHC+tv*1oA0th_-Lrvswhz5b|6|I-}(0Eov_Ll zGfRK`lbh8>da8uQ-52kV7`$dyY^4YAgt|!u<$xr<4k4uppjmD}>$yzEIuc@Cp~yI=kP)vwg*S+{dKEZ7fd}3F%kg|yM3)`uxsl?3T1j( zp1&{;D`p@2Ur-Gr?a^@XTeO7D93Tcf-igaiM6KJpgKak$rIvS=acFO!@Sy=eM}z^t zW$`M-m}Tx>@*;{@ireMRPVo1ehvp2gBuA#fV)gGH7gNVqS#!mGQ6V2GW`^WD!H2m> zcGLMGv@^Z|eKxJw5WL<9aXcV=2JQp89(3f6G^R_}clmG^jBWU^tnw0kR!yHP8CPQf2P+I4Kc9H<>M~ zrFLfBOKcE#jQN$R!JS`Moi(&=RB6ueN4_+>Qk^5sx=eLO{dblums+Jc6P8}3If*LQ z1DzX7!XEt#sNkJW4_WHK@$nUYw(T=(0L=U}ptW^5?t{fcP|oVJ1PS57Un%gzO)@xF*fieb|_8SAE$Ax`Zdi4bSWS73A)Z4 zy@lus)qk8>`jP}JeFBE3HpyiJqfOWhik2L-AzM&Jj3)_CbrRw~RF~wCf)gPM6!sS% zJTbifa#8x2*8E|(&b;RHIVh8uzJ?F+7=JGW^f{e7LDPzmu5i4KP?jjTvg5%;?RE z{hBBxKY=YuBb~6}A?Bxirt~B^y3raB%2B0_uDghXu}YB{?np8cWFM$R%GuhOiUGF> z%?P0VM##Fx6qFf8iFF{iIOoi;sHFc|_rZdiw&j*hW$pn+qJTjXdM^+u@{f!Erw^7V z6R{$e22Rl)QD?Wv4!xlZ@X;<4>s~%EMzjjGoO8!QRgCM#Amq(;pvy~~ zec0r`^Qfrh#n1?miuFUWzI5aYu z84pt_We_%*bvxt1qKf=ziYXDt@1uz%ikws}*R?T~0L3Kz=pfhKU7bK)76*J6X2Iw_ z+1Qs?zO#v33dASSKatPf)~Yx1V1x}aqfcNxM9pMfuPV=;o=zyD1I3r)j(o9X1#!Mj zrN}kF8Oe6I1iIU<{ZS}8ipYrIZB&O%tGg;-|M_PiROHV<34f+KY>F9?Jj`W|K;*R7 z2VVVa0%5+J|J+t>84)GP>E*dQGG0!4<4%!D4yv=W&wd3h^XO@O z{HsAwQ$UcXG_yKkSr9Ie)6fbn5I?kJV{uC9Fm|g}T_m(6uAwz-xqenL`106MhC%cj zTf{YL!^6lGPejsOd(la4Lgl#WvH5W&wm3;=Qs|E~Tqf%cuQNHC@7a*g&76OSK-6xN zuZ!}KOY&lMsB&MK*C}jDDj`ZvvytO|#`Aij$glj^8T(LUe64zS1o_GNMtKvlo`WRH;RL~fsDb<#4((5l)l4a&w z`q3(Xm!75rmO4FJbu`?F4oWn_@R+_y9Jdh=q@k(U*o<_2ql!B~OBMbPIO>k9pl$u; zM3gaecR{@xxh*mOOo(7e`w?Hz!{jkYLhB^k)66`n4e;rBtGwn#**whh>X1;G&1x## zeodTNYyQkH>EkuzY~c4Xao8kXbG@S}%X!W%BE?sMLVkH6MnwTA97PdW<>_t52l09n znz4AHjc0E%*Zg)fqd2x|fT}C`i5wUaz9!3b*67Z#*aaK=-6>lEX~lGKODiuIA9i=? zxJ`^M7jB^`(BGzK&}jE(n1@lwDXSaEsDB$o+Vl)sUSDpt0`06;UjI84ozpMS-;5!i z=YM53{r3#R4v2_`**)l{L(oi1IzGt6r+DGNvqO6Y9bSEj_-v`6n|=IU;pxGY90_5Y z3VV6jXNC98NNF= z;=ljH%)DepWmIKFJygcd+-vP}H~O0o79(s9-7l4r;ljs-^dM`rW$_2tuxzyUM(xx|?t=N5{&TaHNiTq8_e7)nc#X938FVq3pfp4j>lpdc_+ zZ>gKg4tkIs#iWS4Xa*q)1!s+IxdQ~;Zcm#IT~J-RP%}$<`AJf4fEV7k1InANA$Uud zMC9Gm6oWtgTg3*iO1)9wE5??=D+`WVgWbQq=;0qou|=wN zViS5W1TH(|;Ok^Hy66cY%5e2M8LW06Ho+g;5+_V0 z6e!Qj^hWU3C6r18O_0WI*h=rrF3l4t$F0wq z*mEA7he9+#iS!qU-7SAYbi1ay4{#fsY7~U}`PFVPZHiE6NUJLm2yU@VMd%l={!u
yqEfhIo+T#pQrcKhhY;Ib^@rdkzBq8Vr6%?%RtnSJ!zvXOdos+2X^=&oDsd5Y^%$z6u@mAw|Bq}e?MS7z{2 z|IMMGf>d=IRZ%}c+dBj`h@WcBL6l3%?mzt58B>hTm!kg(f$|p z@aoTpurQEHbjND^{kDrR541Cs4fgG+Hm;C>JPs0kr-W1qp3hm5r6Eu&!}@|`Cd~po zc%b~kT}0bmI{+8>me#(w1n{4X1kG#hYSN8>)@oNktb}N+r^@r%=xtBufj{pJ{KU*x z=?izMv_)Y`Dj7}&+nOQz{;_>QJybvuYhUvo98f{y*Yq}yb^e$DC5!L>$N5dWNchOL zW)(;WQ(tUu2Hd6i+E}#6c++=VS@}Y7XlC#4L76;?MBA#L-sY?|j3c)J+PcXD)E5P6N|BH{Z%ZBeloe231vy=RF%?|X4}H`iutNsE<@dZ& z5M9swbW5`opYd^b0*7TR2RtL%JblrIuU)odOzYl-wn%E!! z3ZvoIKKwv3{`uqOw3#ADr-!Jrt;N$6SnMrPH_f(sC5D)hlXwrKtIwMGJ&JfuI3`Tw2=D zpxG;0(4`WgWvcHKVM|;^LFus3YFdTPE3$)2w3N$x&{x1;aff%^^ZcDWNO@};U zg{gR~dS3GYmjATN@rSM~!M1|(4D9>_TvsmFayP=+=fd>nqL^85%JOCFpyCX`Ca7JO$!0XX}xBZ)3vFEwvV*7ru-qzKTrp$ zujM^xrt}=tv0S+Va>|8W2YsJ7xQ*&fEG~uvuM$L^7$BBX2Lu=%wfF~Y5}=&64hYtW z-yzHbyGi3o=@j5zY%x$ER$K>fx5VNH-^Y4*%4WqRT@)~KJvLwmkL9HBurw|YbQhoq zlNaJE4xZrR{5)SY=fj4bmHZ$Tku;|Mo6^MW7jVbo+`TmK{f^Yo@TkA)#(S&%81q%p>#a|;!o2RJYfgz z?oQHKr2hBs6LrL;22}MxjzD_^+oSv}0=ghhezLEW#)Y233YO{$fdk>`@SLj-NALl7 zUSo<5iY2+7bUXIk@4vrKl7)PKU2FsW%4lSA{tNNQe{v1)s`8%rR7r1GL)=Q~swo=` z=@bYS)WwiM_iI6ua&~Sgu{E5dv}m=vO{^C9omy9L3sl1aq_dx;XJ82en0+rLTTgGE)5BGuyfKb&b>Z+(a3H$O zKqdS%P#QJ$PeIC0MR0|LzUO}PjD8exW776hSob@EuuXP9*!1QY7wWaUgJ6AJkwkwPfyV*T z?OSaXkiCs>#G0Ty{xn|u{lL?JRns_ek_sI_pZMm4dtMRgyRPg7)Gh?HDK3Go|Eauy z((ZluoifaR)ebdD@m2kIQzypvVMS5T^da*EQq8Fq5JAm$1vwX;f!bP@E04Z}yRRMm z#q1{xSObh{Gmm?cPs}40%1k2wxA;=*r~aeavp^Q6gI|1bxt?|n$C!WOhE*&8dr2Yd z2z>S=9S4%2&i@b>-$3sp zGie1N-Q6v%s-v%*XDi?aFd*;g=WyjMGV5ML9)=auPS5ffe;d|3UdAWpjIY04IC@nW zM`{XwGUXkq=foyw+-+?U!#vA7Hfc~RtQTo`|N1{YxmpiK+;oB*)lp4Vfm1HB;Krpe z4T?E*{Cm8Ptj3x!bZ%)}tg(RB1%R|3dLi`MME^&3%55Vf2FA@p(3zLse~EIT0YN9w z^F~Ac06j}f>c98JqoMhMZ#l|n;t{yHwiX1E;lc-y_lx)g7C}H$^}s5x^a^!FY4{fE zaAETr$~<*%)JH4}ZXQO@3v)uwk0JbpM8pe6aZkE$gN^;0P-3~Id&<-elc&|PR$E=Q zrK8hs1oL5q7woC^!b3`2_ZA=_#i8e>bl30HCGMWoP^ksQ3sXkgr~J;6<4gUS2y+Ax zlod3FjMg_#;Et-!SxcDIw>yFNyy+QZ@f0`yU*;MEb>(>>BTnwJ>OEUX0>lH3*6x|a zs`MZ}x&-RmkKf^lMh19zRClU-%DaDW=1fOj5)?R(np-8DqA~WU6b1dtvdX49@H%B8 z?=>wZRC}lG&P{@3enjU5P0!lIWk5@94te}L5$Xfw`jkQPEpDtJE|ADZge7s4T(paS zPfK#nG{jGHM}=k{>?hi4;LvZBo0p;LZxQmAFo-7=hPyMM9m>V`W&BI~V?Y*%oX5a; z&tZ~{vfQujY>?Mb*o6dazj@+zhKWl1eICDa9-3mciWY@ku~=#IW!L((UNJ$jI3{jy zj4k$sH;p*`txJFRapvc?-OW*mKNl53B#U`3vV_7e?0oqvFvJU9)|Lc>_&t~7NL)bC z+PUzN5+0{$0N=J1(YZg-G7Fx0z3M}8dW_J)T0z{cUcJM$Kc8Ffz|j#!7^69rztS?J zgR`P7^H=5H6rb46MkbE&E{GYc7%EBzKLz!OtF9n|%~R%HxWaVd6g;9`u2LIY8@PL? zstW0_I8+CGS5evdcIr@h&AEM;{{Nrs*P>xQ74H4=kEL$d> z4M3pc%c8f0(lwl*(YcbR8&8Zl4zUlT&h{P{Hh;KO->2^X?C8w0yg?1f31j z)xysV=)P@bDYiU*z8p;r=Vhp!Pf^$^Rh_qbQWYGcPW`KzUXG@$Kzrc*B2~4*UnnhO zAz+Xgf}>G}_UD5yT^SR7%Y<+K8$+rtXdYd*IN@&DeFs?S@{+_dE|9$OTJk4lxQ$sO z=l_MrSQb9fTBfYvm>7cq_^>18Tcd#9dxx&5m4|8Z-Tc{+_thAxCu_S4t*?>wzo-A1 z`Jtvh4xU{tAuRe;tm-z*2vXd?jXmsAy1hw%E@d|!ZxER9_mhHD6i1KDnzfilF*Iv? zfrr=H1HoNMvRx+5IbQYRKzy^8b2DmJ&EeYfhF=2DZJz9Vr zBJ=F6>NF=w#$c3bLM5t88OzF(Fl`7>IssY!fhAK!Z|D!tQZ$}ZWOxG0UJ_**C*F_t zWmTuBRiyAc@<&P0{eLVW$M|UeL5RQSqkhjr<8FS{E(6q@&VlarQW&3cUTH)^F-f}z6t6Th5cZ-Dl}|x)l!WPNFhwjnz?dw| zRP+aM4+?9iLLzmFrcyp};8=eViEZlY!>JBv$^;*eSwB9f;4`(W&)|ylLrdh%;^&jIqoqH)|H0>&n|~4)h@T_ub+1rze3|CM zEqlwmxb4`x7pb$xpi)_&r<2Q>gC8E!U($jk`@z~}5xWG1lc972=l|jp8V)kU&60_&ZPUgRI6~V3|fwS7l>6so}R6Vk5n=@{up9OY~FDj3opY z{Vr&aE~gQi>O?he$EFskCxJFL_?Oymsrs*~gW4p?MS-Ijy;wN@nAY1FXf}}Z<=hF7$?{yLovW4dnLBvY!DQsJ zzwn}&eM^Z}(Vh@Xb|PG<`6I(EYbSM&8Qfl=RoHAh-AqtKmk;BVymY@y$+%nrl4}BO z7?N~W_-tVDQs_4Ml*U2=V9R1eHa(;|sm($uliD5x9uuki{#{x6^zbz~d%ommd5IWh z(k#KA1X4<#2%(}(xYV>am&zvps2NCqxW@Q}aSD^+V`(p7$}Ed+E{Z#tl12NDDOPi@ zbzy^8S1MH6IV9JHW;(YMX<;@Uo%_pXe32Ej7kGcoYBLz5rYFpgK$|grdaFqHq2h*C zxFy*%#P5C$=tDULb@VQ8(7gJ$(t^HX71DNIE}`gz>w#&OXuyo^x3(C742X;-%1J zk(4H-V1Iu{tnAAD($Rj=mLUGxiW!=GyA>cazK8H7db*^Fb_@KP8HwoPC4SVTjv61| zX?XHs@e$IMjYu3UMMOU4=8_pRzRJ4m04BCDi8>bN4|KoN*$>sN;Ws!50i;%Zk8Lz~ z@YQC*Qkx7N`Q+Ev=Tv4?YeQ454Ue@nIs=HxpAS-4Y(D<9{3@Xn56%as{ z#krl^1-uOU9zUw{eEPzd^_A`IwV|2|Oxx*t-l*<)D|hy#zw8*htbMroJkqxDRcY@8 z@m=PQJZRn#z4g14!tPbS_VJnlPoHX5R>Y4%ZC{%!_kvp4llLCc2C*$EYrbl;gTJ+U zrGY8Z@5MxK`KkrK(heFq#uUK`?#9s+Xf@rn-tY3DVr0wZXYA`o#2ldC%sGN_+&`!z zK4X;b&xs6Cbj)au5q>^J)`&`rhQCj4{f$QPF4cr_78UHeGX=vQH zNjf~$g{T{kWIo-y)Rt9gBi_@M<*g=q$t8M`)4NA+d3kBI-Ga@lygouKa^8-cdFm=u zUiO`elpUOL*sM=vXrEjvV?z4aly8e|RM}VdyxVRqn!N|k!Bd4_#P(hg@E3WdeYM9KTs@3cW!St*uf<^0;qIR5j5}LLZX)6!DL_O>>D|J{U zke1EovuwEF*RNFab8>Ur+>{KO57$K3+hL)IJbh%`6*cUZm$1VU?AtCFu-0OrW$FM~ zl@HY=b7V!cNr@<2Ux^T;Dy3gyVkCX6Y5+Bom7!hJ`M|f#|I8v7`mlTd@}&X&cmUpP zXr+Q2dF02hw2v9f8}4eBes$-Ey}l z}-I0tlB3ZG=FVsNC z@@2pF@zO!PSQq(Jvd(*p7qh;Uy_hVMl54$w_K>^SPQ{-4enLohRDnGrx@h49lJK{- zrVxewsT%I;nkmwA#Q1Q1ZMRxiZu~VNkM365IROQ%UwzT6%g3zKm&thIH4N&TOCAUL zn~?VHHFsr9C0ifIsH!&R3-~iI#PneCR86S#kqhRer_P)dA{ysk$Y^(*8E4%vjdJ#7 zO5FS3G41SWx)8Cwg4`yXLDja^s&D@34}YaB41toZ;M+@1*o>QA6OE zQ04{#-}l3piL&Jd0W+C`4!H|ZXZ8i?BQuro;Oyal=dmzg^}NaU92;qAD-j^46GD$) zbNRoKg@niU7bPpni7@WckrP;*b!QNp;vMh`nJ;C)&KY4snxVzm!*q8q0qU)e%?B;9 zxC~T|&NTxn3tzV8u;`{?*0n|hcvpG0p>39p|LKWPb2_x`Yh2=s@aE^Ubx+p&R5yG{ zsJnX;nH`&`Wz9xN&5$oB>}~H|NO<;4)fRdpFZgbrBJTLFOKvd*g8uUzlNzwt*PkP4 z>fM_f&0fDg=-Tp`Z!LyikvYE#AM0w)a_v?@{wz(DCu363(7z%|2^CJM1;!Nt`ucdR z{V`ql$dLUxqI_*0K`W~{Eon^*f)AD5xjyb_Bd4hN=z6ubJl58p)^mS|yk9Ght8b3J z8FKmDgvV>o#5E}bS_>av)XjTR+k7yKQ|?gk>d+9!&g-4C?z$r8QY5ppT$7b>N z?znKK==sI-*n#Z7u0ZBx$9$y&$OPrJ<#3ow_^FBP+~;b|sBv=s#LF8c;%Ut0Fqidv zC3_yWSZT}7x$@yN=GJR4#D?@ff;?zNE)Rn4?uL-aVSRp(L^V2`_Yh5z6y@WV88}zz z{fllpAwHb0CtlrB{k61WjjyhbNyaGx=c%GOERZ0e4^2YU)QqG$7fwj<5j(T>%!WC& zj+S5zDE{PLx9#|>1>4BHXWd>4V?dc~VJZV; zlUSKR(A4ao1<~kx_p$j*?@olF?yn6+RFgwO{1~@S`pZ+1ylaJwO{)AnXwTs)S?wWm zp?mTgb+AMI+j-z%GLQ-BkI<9!X4z>n;_=6X6lw#@(?aUQ5jws$xT70%HpO5<7&v}~ zE%Q&OBKBJ~bUdYWrYH*l8eP)BsJTV{`@(7Jh2}rDX;2fjz}75)`xDUDy1v2kDagf1 z2Z}%D%ez+wihoDxYjLxEA6m`isCD3tJ8WL5HSN=^`IHkC3jci`$;HG{f*On`e>FGs zVP-p|>RG)~dv$&7_H$eAVHY+B`SQx`XWin?^>wt|4Rp8vy3h7``}EVNoVjzK=fXK) z2~hVbH@bP{-pLC)tqHg`Y+V`|I_O2Y?BRO~eAfhaQH-Abi&5X=_S!70;YvRU*LPpv{)?SN5V(gK0(G7X zho$;!B_5cHU~+@EH?aK4dHPghrxrTj6V^X>2Aa1m`u1*~lYhWYPwJiSer#{cmANYr zhxp&PcY+4b1712eZyt;69#-YrsNf5t4RqZMHwGZ-C;;Ali*GNzkz`OuWit=4zQol< zC(&}JvSEz>E`~J>EZY{}-b|B!xcGq!?arB56J>gW7sbEu=GY2r5wykZ}35uYt*@IasB$lO%JKV=9J9} zSDf7&$G7;H?5|_r;uTl$rySK|g~08K$2(d2Cou-;HX$-KPv8 zdGNEtrkTs?5{#Wg)(9-tLIhXYY+yd{#cTvv!cuOINke|voOi@q7@}ZH3Kd_ya;*W) zD{Q2+-)dSvv{f>Z#X(Ko*TTFxwu8b6MoL7G?FVdUEZ_ zuTz#Cc_XR(TO^_&K58A8Ho@tCzpb5D3#x-U2`~%-YKI+#x4VIS-(UJB6~{5E0OVK%v2P#DCi=V zb`w!caMeDs2)f#cYp8zEkZ8LpXn28@OKozi+TzKa*n@qE*tEW3gAc04ILMN=9Id)yVth^@A=>Afqr&y)8UT1y*E{v zc@OA|=k{Yqv_fuXaQj7q=ZV0D^Y;=08~~6caFp?7j|&Zp1V5Js?J0gN7rT z{-?L_=y=Odr-!hqb>(Xc3y{jSeCbO!1F_xs2YlK$HG&upJs+P1*@4GV3eBufKYz5& z%F3sIipW=?@Z9kO7e`3=nm?H$Wr2rW>OI%Dk!Q z@&m5WG9Xa4dDlThV7+o=dmY|XUAz1acMLcnpBK63UaBEGT4{aL^D27Z)RMZ!N7c06 zi3N4d_y0rZF4vt*EXb28N3KKCK@HIM^ksMN&UmGMsTQ-@&wV~|r_Dfk$i2@B%S_q1 z$}S8YBDSscDyA21-YKr>#f3vvkdRF%UlSh`(lyav$|&_#PnC-$St^+mSH@-2u`Bjl z3h7;r7rUt^f|#?E!=0ANv9YI$jlx&)PdQrmqx(`!MIrI2)|Zfq)&0LkZo|9ve(Wtp z=pB%SQwLa#T>l8X@q$EcOQJWot+2iRnp**8nZ`hERUf<3p0q&yJ5UtJziak%9Q1Jf zH+Kfa#pT{A1M0g{vo8COb8q$lvWX)~c!(A-8v^fFAkL9v6B;FS=v+JJJcPXc7fhu6 zG2KTPkcG${M6rExmcQ5$7D2Kd-(%)5$75yK(Bk_#ABnOz`U=J$R@*Q$YWILgP;)!E z0sa$JR|t|RtmouixU30T&N~f^%a!r^%<%8E*CB$Q@pQcYIv=CV3thXV^R!a?O7OyO&nrv8K& z!E`atyg6tAPtW!rTTjROIdTDZB7Men{$i);eHAkdJaTtG+8Kt861XM;ob59JOv^l_ zS(Q7PaNO(&J4qlqU2#W)J$pEN^_K^h>s*&k!O1kQ+0-zo8RyqMXyO+93JcLcUOCsG z>x1$;5rM3;#Xeu&2f~*cx*TnZ`qS?MBW1Fi*Ve`B;ah`53Ne=xW1(Nntaf z#YmToeyl(XQ4cyN-U8e`pma>WnWwmwN+lf+kE`Rd9hNxLXd6_f*Dix8+&hos#tpUv-s(YHje(=S%2Cl<(uo8{qlh(gw zIgCQ`GcOxFKIgj-TX1;phQ*Z-V}paf6Wc@;R*JsG z`gg%=D&kIbN{b*GdS-REZ1KT40{DlR0nF(YmVZ5E)y%5Mj5`dPMO`feUHL__W`OWz zhKsjy`-?o~_z7LzS+siwE5uPg8eY`c&~jDShbdK}*%kPKUY#-{Im3Of9OCx#d^FE8 zKgh+_SpVAt55Hq21NtOs-}FQAs+G7Rw-6QHh2ejCs#i8-bDOZ${MMUWF~pyZB|R#D z)WX7~2H}C_&IWDgXDB+mk=H z4P-zCri+C{l_xt9;o|0LnK`fz9}~eHDxNqYWTX86S$u2VUgTrUVFUQMW>bsTwEZwB zzLsN55-vvL?WiDFTl4V+Ch+#01v{#=OIc~>Wg|IcnAvTF>cK6+g;o9Pfw&6^pdj9f=D4UcopxB#LHdF8=0; ze@nx{+PoX8js;z`{`j!`r$B`UBe{4Q`1uZ6BUTv*WSJAp<&TWC$b_d4$2@| z?9axP0Vx5i>$bki%NysDC<0++Rq&}`nJhZ1Do+}*n2V$Sj_~1c8%~gM%R7r`L0~&S zh@b0`!IwpQ=cRff-7Dg+c|&v5mj77d)`u*t5dL!4uF7PKwo!fH93&)Y5Qdiz#i8dj zeKWo5^q4$ItJPXF0L&nw=W%Lz^o;(ZQa1a?71Wq_9QOTrC~RF1YF9pC;_0vR|W`;es8?nh+r#n}5D#99C>Kr`|%%O|Y zTHE);31#MVDRQqWgUpjn>BHq}0Z~67SL!c;i~- zkDO4DQ(@-CF84I z2u9w;9nA{2ZG4aDsPck9`@n&F2@$J)sw1e8(^v&NoXRj!`At z#0ishf4w&2Dk8c}a6M{?kdOwItc^e`R)#y4#!oMlI`P z)n3hoH@O}29I$1PfbVx^5OCm9D*Eve>GvxRBW+ilM=aDFm(m6A^e{a`7x|JZa@p>< z+^%!i9M$SPNg%$_;&;F0-~<;sQMHf6;UZatuSJtT4NZnkc_);GRm;x%BDP| zftoOx3Vf1X^I-4UZ}9zez}1_1gKCr^CmMczZu%i-fqWNH!h{WG>{7L}6OCH>7 z=!-Hi6QMeiv|2Q(?f!O&hYk4n5x2(r--LH{#gckeFRlv~>}%m%NKL}rXm@C142!Lc z_z@KR1egP_Nc`DMhY_OilB2^)Uac+&jOp8cDda8z{E^VV4i?M3g_9AOHXBJMnMN&t zp6M)Jx91DH<hBLqP*NaoGEYjjjTv$#|p z#ydpnS4_rwLRis};&QluvMO_?b>%r_RWE`#txsRhE0q_PkDYzci-CC@F_c!6&0ed zmv7^q4PUM-)VxAv<_t;!{P&fASkuUve8gAf`LX0Zl?+Ly1lSy&jrg|Pch%XlK0>4} z@v6G(0ls-eaNi^=WScTG8>^b1AUJmm5$F$X#Ra=#m!aBX+FJyh$usX<%^33991AH_ zu$EYJJWA3qh*q^1LIcu@#hYS8K7S7!viWT1Yo?h&B{~|7r1YjHFh_gw&dXzC?@!TN z$?me6nA*31J^b4OSp5?H z*APO3+?Rz^V!_4X*T&53dfM>F2fN(Yn;w}MHq@#)GnGoFb3Qc{lI#TWK8**t5sr=D zV^IytCgX67&w7lvlf)AyKBcA(izgBqLRwWGEaKR++lO8@T)g3FV?HzVmq(oX(Pl@t z?C9!*SbeJueA>9-FsH>`Y^6#smlNhNaO$&Igzyp=5*&gofv<|JqH(txP{eDPSIfhL0ac2pX?yGUR5G}mwwAX(lnt(#B_(oi& zGv=P+N~L^H8D}?rG}}Y$qDKr;7<`FY@LnsS3pphdmMt{yX~6g6I#r(N*d`A!NF8ro z^W~oYDkNZYr%%=V>-PeXH_bs;y!v$Wbbx6*+_pgN^5+sB>m!nly8#P}*Z;Yt#ZsRa}MS zF-$YUo!))}r&wqgvr!hR+Ik*oGZN*b^Pf9h@NV)7&WgnGees?w(zs?U6+iqV^cyk2 z1I9t$Z++M}WsH+&44qV4r)l=9IyMTv`*R`mq8D+pWvNLLBRYey48gpY2XB&w{q(RM z)#k^kOQEl@noqaRteb4Fq8Tx=qsWRxFJwY)*Fnq3+29;*4U~>0lqgaM#J{{M@c0kc zNLO0RZ6})CzBMq?jEDwmn(7k&p1N5&Uq6za0lUghS`M@xKJAqIwtpouPP>y$kT0nt zm5&EIT@;+1NwJQNU%2aKH+=4}91okam%5;HISs z*$`E6Md|x=Aov^jqBVa}nlo&g?YBRH+*Bf3kBfxkALkx(WMwG<`O(iff*zRIpWGy9 zP8;7yL=$AqLws3HBxmEs7^IjNVy;tGjU<_$%lozT*bplonpC%eH^dC zZv{s;a40G*6wC7+BHx0mii0dN^p?QRYa1=t3;Ep_Ol=wOO3HuRXG&$$RxmNOR~RCv z+Z`hL|FJh$Uex?boXJw1CN*KU3i|@6{?$^zcWFQ*t4R$@j;4q8vxO@{%vHfZjLO5d z|8io1Ram*smPce`nKU}#n-iCLOq?*&E9*EbZcg1S#8k&^z;J^Io?=sz7SbiRkp2Ys ztjU3F#E5O-)r4!N?{I9fV8;vl)nGQUA+}4sK87ESXRDr*_(wsVN1jv+`&Y^`1ZH!_ z(mr9t`(HCnvDavZ22!XnX|l-G{GNu^-#ld#>3{B*W=AAt(NwUj=5<`z8i}-gt+eix z-)MrI@x!SHUsrh9Ww#QD$C4+kb2Rf_UN z6h9~9WHOSYC0nv(oi6F5(2yv1ny|aMjw9tLU1OP(l1ZL>XY6Qy495VvD&U)=T<_Xm z7P?Am{_HwW=?3s47Y>J7p?_mH@B1sT{+$1&Edac@^yFPun9;g^#I+VOFkGO@mkd=%Y_SEV#K&?%*> zT8sPli@n&XZ!aVoqN(8_eNGJ5^4aNZ6J*(8-0V;ZxFcswUYe4+C-2ZltJsG%p%N1@ z`y|>+D3d3j<}8tGc6;{aaT_kl4@+}QacHFxU8**G$Yu2RrK(>_7M72TjNdrs|H@^> zEJIW~GT75lyGg92@i6xk3mrP}GsW6CgYOVi-(bmvh{m0PkwwZhz2G#MkdV2X#~?Um z8uahR2GmW*a^Qm;txZiA5B;YP-zN9`N$%6J7!`=M;II{r6Gt8TF`PmM7*O-LI=;hs zu~MIM13QvwaB9`zcwLLshYV^=G*=fa1bs*e;(wkkj_G3jghMm|^c(+hn?qR~8#Ly) zE`Y5h`%A+OUM@EWuA&nuVaw2PZ>GTbr*L?+a@bMYIb|?qAvkKVFfxVc>z``TPCiGL z;2g55bxD4Een^?=Y2m7imKji0BUJDF236-m^mpzNHEyq~;cC2(V^&QhRjPr-=YOm! z5&4TV_obiXgH)3HWB7|VxWZKy_i}o%GB=uOuTg%>t{kx}@r7-uAaUT<0GPrHMsC=w zO7O?~(0nrQPjY#EHl|el&2KG#j)VsPt3${$BN!-|=!5Xtz~)*REZb)D!PDk6ePyRO zeJ%T2cK$CnT>iuB*7Dl#`PNc-Z&AflADUYh^X4Gq6h5PL76m2agk+J=B$Iwdr1aC6 zWRW{hEl6fjVfL#lT;>CPtQj8ZRuGYOx~SMQg*`s$L~(&nDpNx8f!dOg;{VlIIXYHU zjP`%MNyq)ahDk;D`0vrPd%hmg-2e1H$9I!RY3{o*-s^MSJ#`gWg*Y7e;WR@}_N;IayDB5z;h?dopei28wD? z@5#0RG&9c|bvOOIN6~|g6D@xC?B;eTn9VO%XM$4*H#8~PIf%A*psVCALVdFeact8o zv&?%8bkdyt}Hd_S-fY>Ci+cz%yGs(RB3r z_bYvS8O)VLx?^Tym4GZ|0u+JnQWKmO>5Uw$<;#KYqFS=h3OChj>hl;k%|W0O`B~{8 z+LrviQ|LF<<}D<;=yV!^rYN`!C1yveei> zV;8bdG14X+@%$|OcYD`Hz z{6xgwvVmb5R@8ZDPACW@T$ECA#y?110_4xL$fHaW3ZTr49%fS$hkfq*H(O|F0#$iyf-2+xY z!dnsT&gsvOIKEOtuysiWP8#n=$&_NTyaO~G_lkZ8XL&wGOo)mtK?Nsg!P)c!kUzuQ z>`7QUXzK9po`?zb|7!C3K+fhLd5z<1qU*CDE?r<#YeTE;xIZUXt9m!UoG@M)c!+oS zk@}fp{fGQzeSN+EHeTBhHM`B7IP-UqMv*X&%~m{wN^7#i-VE_s1dd=rUXicVm^|2> z%p)8ctBe$M`ME$L=sJr9PM5o%-XjAsLEs8XIBI^IRYD`X-WHZiMWX>6=2{V~MELdq zW#xOfqa_YOZMZVIsoRY;ck%7Ht)MK^JuT|IWfFV1%7{bl&l9RdjIT2Dd`fb%*B{NE zOZOsjf&@z)>itwRJ|=7@Fvp@ZtPWrH9wVj>~O+uMO2XD z{owd<&fV7t{@U$h2Ks~Xtal4k8t>jxf~KauJIuBNAj_$tp@+N%J?V?((`?}4EU4uh zFYw`HqO}c_GszbI;Gd@HQnm;>c#s3-X$jvdPddK$f$+0|-HzCX4zKfhz!$&w*-vV_ z!$QSO6o1r@Q)|BOv;IRC+MQ6Ar>8l9e;H0ddmFp;7tqtyldL~*_Aq1cP0$l-+UY)C zlY5hRZF1wO{oDS&+g>|e;&oL?H}>KFg9))N1Z);=Y-kCAO9S7EQB4*VYTaZ zqFh)r7?_R7Rbhzvt7DYf=8=QGeI2%I%@CP=F`(pCY?i55&m>2WFgdroA?)uwaR~H` zX8+y$y)X!>qEmK4i!hT!S_OH~ZJS=`eMg3Kypr}=!rMP)bs@}Z|)}?zB zYhJSB;q~^Gt(^31@j$pn#Wr|TZ}CUmOgy?kGuFMd-qNlMr#O;WQHsY;_?zj2y3y&B znJNbC(!M}&BW_iG2q_}#yiPFe{N9*i`3>q7J6(IzCkhkpvUKNx>W%ncPmTyPOH_Pb ze;5D4f&~jiN)<6!#WPFhG+cXcIYgQr^lu9M(T;-5pvmkccVhX0k$r*$<~nZg9dIVE z56f70&T$9F1-7mc>n--#hh=W7 z*aKYd^K4=7lyysPaBm+FGx-U7fFDAix{OGSKj64$xfz`+X5aJbJA^cbk(zh0s)ASy>^Ta&%<{JXMO%iqx$@*+0diJ~r6Su&xItt@~Z-R9aSp zT`wU@#P`KH-m5^*g6=4Nx29q8|EJa_<7 zZ&h320|~~D#)3>x05Ma74#4FH^U9Ll#RyH40wI*Qfo4o7?Wi|B`*fa}@*QZx8@N~V zJ#F{r;Lpi=AT698xb)}^*oW{f!k@uO1=h9#3a(8aBtPHXprB{XVrt1HgT)pKJa zcX#AqIeB&_ABdZ{`~zb^2?s7sNMu6m-iK+qYYYeJMNo);CqkpsZ7pJQk_jd+DO}p1 z+b1oOAJVoD=$@6hX9%8D8Z3+8+rjUC0P|KPc$iAyES9uwb-bI3Xdi*J5A6e4gcwSg zW8g0lfTIo-_9G>~F#rM)16~0S)r$}r7=EOGlq}?j9z){D9NHLX4)z@aAbETLdN;9Y z0J;J;9nM5!GvyKG(SwO1mvXfWCI1dv5*oKmQC|2V%5w=P1e4eWAu2Oct-}*VA%r^D z?OyO2?n_Tsriqk;or8>eLrOZwP58EBhF$+Nns7e-pI1n@`v9ILyI1%f3cnQ#aBatC zi(#SK%++N3Hxq8K4__f`4IKBtFDAn?{wWR`wF@+R*5d#|^t6F_uW!r0>a~&Le@RQQ z{+zIoOCAtvNQAz0hv#&+ik4j+3K1VO2+0mj>^H!R9RVjpv`fk<9y7|ct``Q79TVkO z507Z_QJ3S+Ha))w?Q{$0UI*>mwySxfkyY@Pu_;(ub9DSHl&YdrMW$QWk0 zVw#E^PDU`y3Q5<*@2`oo5Ur&DY?zZf=b#X0Odv?3GWuDL8(Bhu%$Jd-+uhQySQZeT zqGDSV4N(QPwgK~&dM1i(LIT=irLjr);EWITrC1ut1cza;i2o8d{ugEM7+g!#e*4C@ zjUC&zZ9CbqZQHhO+ctLWWGC6NZLOR4t#eM*z4w1V+%He{THQTYRnMyKUUU4OF|J=N ztkeA<-ly+Gyq~8ttEb-9`lWAhY=%7*JL{`>#Wm^M3^;$=S&2=v zGLILz{>vsi`S8VrVKbgy;`UJeMrjY>*{_g0$y!tzP=6v?!yznr7 z*G00Z9SYdsug~~lg`pd1P_NjDX7Q)}#+ICg~_Mju?TG9w&% zh6E^OqNnpvH8bjaVuLZX&P*YQnU0Zq9nX%l(=^(&GFwrlp?hrQja?hlO$kc=MPJTW zR|~f&jRD`c1p<6Ssne0?*D=qwy+F4M9V#d%{vBkp4^{Ptxb}d}!EbYVE2$Tj!9N}&E&=k062*f+ zmE_k!;Zc*~g6G+sAP0bY{rEwMJ)foSZB3MI&F)J|5?Rm2gPKrm9@3wix$%yUq4K7t>+(@j)~cu9-{o+}iWzKJ$GP;}wO|oZwrbSM ze1D`MzMP$_?8$;@dV=1(HAUx?RXKXtQtd^8-SyE9muUguWB9f=?wtX6e#HOGbsPZn z*gj}xtvL_?#y;Qdo%i?QGSB>lx0{2|t^P6P(7#LX9`oLJKXd5kNl;&>{kePmd|Y(` zIKJz66EH@Y83F|XtvJb|e*K_23=$Yv?y<}~w>oxxiE{Kj72Y+f87)*ql$q-jT(Ti~ zVSy9MjGlqHRpFK?Q|{X*2g;_4RZ_|~y~b$9Z{P<_hROH0vuw#Q892E}8_TPln>rT! zI(V=0tL$t1782uXFtFA68{a<=@CIr%rJ>_yDjRLLH0IRc=TG)^P~+t82RnqBl=-oe zaP}1+{rFm8*BYcz94Sk1&N2%`H;&$zeD&1e`AY<}ymoMNlA+!-KB;WL zOB*DLN4n{+xI6D?<^YQ0-=_T3=6Jt$>5cM-hxS;(;TNiY_55XiJ~AITk{a zT3X&(DT3Rx$bZ5d5qK2jv2>G;sWplO51A#3#?2#1ye_x&seEd%VOHHdeldj9@j{km z7R{nZg&-Wqusk>%K(Z-1Lkwn+B*i;&5<}#s9@r%4TiPjEwZRIoJ^TIW7+L5Xhd*!J z-DLHd0(-bkCBJdRwJ`ny8CAW6Z0&LVByjo^@g7c%?k24{B2qC*heL-EM;WzTWsZ?+ zx(52(r^%R(M&3G}QKdv_>-}Y*m9QfazBYxU5`QwPlx8oqo3!Siey)A5N$92)toau) z#-hP4`7pUJ?MT9-!DQS#!af*0tezgJB~(ZY0=W}Y(G{yVUxH9CP1B;9=Pmy8t93wA z*U*Rhk}JuQdY)6x8CQ9o!;t80MF;nGWpn5}eoc7G5@V}{@ZqkVCwf-sEMzGzo(z6U)-Tv{e@th&kK2`r8O$YI1BV`zy8*oLTyDEMOF z`suAxR(y}%j7<)qPR5O)S&bj(hfX^svSldlCw^{BNCbCOYxV5rIwil?aDDMEv19ns&!GbjbE5%tBrZ_=w!k+^ z&k@Td%~e2i1uvq4*G_F$x)fS->rAm4rAmg;%rkWTkZe!c^@CL!P~j(EJua;58|t@E z=T)a|p=+_+d{!p`O~cr&^gf`+-LHjPYA~Ijt9&-Up|}kIQ>9b?6?4t5GsTP8Q|F%! zezoZqQKidTw)_W{XU!`;w>@ZY8={A=#)dKBuFn>I>U>lnHJVov=kktz+F+=t6kCcK z()KC-X~im+48WO`x7E}d-?}XCvO5`zFKbaVk~%s_#nwhjAJiGgK!a=To4dI#Yk$cP zHS$_N8`vuEK9BH&9c^~jL#L%cR}3+6!VUdui8UEDF_-=(u}i2n1Y4e0y9CM7qtt#@ zr#~Qx@tkie?}|=oWrSLF_+w!l=qNlgl(12cR)|=fEu?w(zHU4prTBNw|5<(EJXz>r$@lEaLx``7OZaR6X2~C;O z0@tvnt@$Of3iSC^?G{k9%{k;sbiQqx|0G@sU6a-|6g40p6f~;!0(nbZbq0RZV+3on z#ij_KSu_`U4I!ifo6BQ&=PSNTPA7^o(YMo9dl-8;|59g3iHL@z7F~HSjNV;M_tpab zAa#XeMf=1eazm>L;gb)iFv^aRH?_~Leb+Ynp$02qLYRSKT}pM2?esD$P6L%JMFr>M zf<;mT($tErRR?i~by*~|MT}d3fK_`?&j>YV;wT=xEI-%9A{rKu8s*<>ucl$ggqp#X z6FQWy!yfuNef}Anru(}FlR7+=W05oL5J>MKZ`&#oVSGQ22^{K^H@7n~L7O#EVVds{ zOcf#btGOa@8-n(`WwJoM@pA8~P3||9b%ac2e9i9(;m~uITJt9hPz}1#KK)kGlk&Y| zy@qea^U`1~7PCRqX?+jLIv~XN{3?J(ua~bkGv>FOj4e$3k%A+#l1=w{w$clYf=}Q%ylQ5b`Ed5oHTmiUhvu1wu#vbv*nCuCr6C=}3x3U-1|S+@I+n5@H1 zqcJ9GU;0`#4nu!qvn@Qc>$-Xs`nj_H!C~mAs(c;kvhd{hI0E;C9fF9VthjAhD;XC& zO#rxAubrjJO*s58)ZVquMsRA~9o6oUFO;1#{{4KU#=ebb;Am z-!Zf5kX4t4v{7kF`fiBvqN)Twhm8d+IWwqiG7}ee?7L_Q8)Io)@XJ)ELP_1h{ z#y_UH_c0n0H=Ua#Noyoq6YO$rbmB7hwpBiox6}vuM&x;q64NmXwTxe(Z_*E*ggLQdDCDOT?YyMO*2o;H-P@ z6RO!T8Lo#=$hN^HFiIWY$tud|sCG|lH3KUjG0(?5?UR77!74+8JH?J)uX>k?lYyxY zTXgeCE_LaoDr0$f1}ABbKMOI@Z5w;SsT+BEK#agStUkMqopQc1Eu0Fpa&+7>T+AE)|Ax_do%E|+h;4CNe<69#-XYfEkoPMl1P>KxtJ=#|LO(Y?$fDo^`8+4_r@ zW%B!^^!pVBWknGi3=g`At|l;vrgc(~n$mV;@JG zg)laFI9Ymfv6?P}PxCPL@eoRAA^yG6GO3Oc#TJ#@-+2N09gw%EXu*LaR(?lB{~MVq z7FXvy%>#-A=%OB2v5ECeyx4~~0w%06;0Q0qqG>mb3u>X9GxxabS9kDZ6+!~g8M-hM z5t~>QG5^$ni>6s3OfsXHu=%F0&%vLtE8Z9y>rt$GSjjoxh8+{q!eRyMwxC-ifzVb zdL?Sj0lEwtD`9M&{r*Wcf$Qf`bdur4juLFcM&{}wM~t;bbbDZ`=D6WR4BsEP5aHA` z1udW-2YBB~ge2R(zeYrymXk>Kat|*!{U3x#my)pfnPGwAuXWu4{uF0XhO`ZAgkn|>RV`Y(M@;PhBwr;FABYGKN(Qy4B&wB*%7{Q>b8SCUdk;?v)Sk$g?cna>drA>t{q*13~nJ@8CBBLf#d4Q zxyJnw$zT8C{z5cj<4jW6bRgnS%y0X}KTSMP2EY4Po@Rz`8(zodf@HSLJ3GcfIMW;o zt!S+chyV+*sDr_=jdiMI;`X{=jZzook^ub^#!VgwLK~#V{gr@^yz1%JXd`y{LXI(G z0lsx`X4>3mwda$sNolM`4ZG|Wk51JCR7IXG{E!f_7z;5+qgdiD+Ifi=%Vl!wm+hds z8IG*lp#tbP=UFpaB_y-cn?rv{tps&7}q9TJ{)A`t`plC^Z;~ z&R4rfA(73fBnk8zfSmf^RILr1mo-~c%j|V&DmTr6UAcb!hT>QB!eSI+ayB(Z`nF~O zQ^=NtI#34pNj|w9jnmw))`%z6CM?iOBboKyZ`wf~^moXi{;g?bAQ`djl2CbKn5AE2*%2@iB z_X^94#zA~s0={4MyR_^(<&Hygab&g&9hgfcG(>+r`R|^?@8J$HHqd#UVp|L9UOJdc z*k3;gwOIF&?KhrjiMEhG_|{K)q^Y~ex9!2nmySYg!zoKYH=9L4u=~^++No#h`=QQW z^~k*o(WxnQn}#W2i%h-vRI3fibEVQZSQTJ5>0ZH9N;oJ;D)>^=PhYDlg}QX8zW4V+?{E{e~%}ln1&` z60|^m%k>|2n57Va3oVi<@YIC@F)ghz4eZjDyd0W3{}-sxzW46%gzv-6TPr&|;l9ixcv*lZOSP zXE{V=19h*V*Y47!7O!4Zi(&_Uq^q5YUw$ePCfdhx7mm6VzoGaYDr%P9nhXfAv`!F} zy}vkaNBtwGnIG~lRfsW(2yt*XNehFLVGs2tbd$j97}+zC@4wk;HZd|pJ<(k!)iq{W zEs+mvhMCrZD?zwPmcpInYGxv7eu?ImK4r)DmVJB9yG)`XPGmm%5Py1zmf)ojEeIl3jPm&_$$$tj(IA$gVPO26RIO@++1HMNMRvp9hXi`F8c?Vh}_QsKKkxx_f-6mcRjqR zta{5aUxV@cM;8>XW7m8A$Zf|;T8Md2PGMljznL3jubZ1E#>{Rk_?c;2%qOw>sHbuAM4NmG>Jc%al!)M3yH>WTji#7j7rHRjV{sB%+bAs zC86NRTj@6ncdAtuHS1%p>BGxKX}`P1p6c$%$*>1mXq&GunO#E;hDRxmc=@ zXzr<0h)4#nbJquHw-)r}*V=P(KAk_hD6OupE^TJTrH^d}mJ>uSh<>pLJZ2C5JYqxdeM@zh*MDd;OZcOlyc$7BYAf(%5-*heHk-?E@vK zOSoHokFzJ%Tdur9oXxC}7C|UX>Cu~{cRmf(C&|F$gjqig9CWXiQ%lolIU@Pma61^u zU;L$S&M}{9l@j+{p#gdTAqe2TRqV+TEuovt5N5E7aD-KjX)&DRqr&ocRN|77^2*`7 ziSO>PVRi#0bd^ba)KmSEo&D^MsMl*trhW?73B7Ywi_O3(6DcJaen#3UlyAs~>I4Xe zk98nJv~ya%Se-mh^==LazRjatHHtXTNMIeLP|Iy5gk@D*kScJ>Z0**LBMK5?9!3S5 zeG=fiZ@SY*LnXwyBgSremP$`BaHF;{wj5PM>ei~D>d9FIhTM`Kcc8Sb(YH^AH3bz;&vZ&(5`!hX0d6gXwd3IzO3O(as- zHl#_7AfEWgB3YuRReh3<@&$4^iTDri78Z?}<-SRbqR10S0#DfQgbUXdDH?aG!eQ`X z3cXmRa45(LlOWw&lflCZ1&ke9t0|G9zo8SLe@tq_QX*!P>A-@y40Zm$z*LWF{nI7u zLSVXDUdV2nXVFxfND(cBnYHqiC*Mt>?<{B>BBYA_oEU|#T5Hq+B>io#N{^MXkQ(I$~ z`k24g%PYf!$2apUL&Rqg`y33IppZNxEtY9ZT~F?+HVAe>F&9mgES^$|uX>$Y>EfWR zFsTpOfV7(OwIPLcZ(3=X0$K(+)}u4a1p>|>u0PPaEKJ#&VE|nrR2a$yc+CPhxI|WC z7c&JWbox`AVjM+=BDa}C4{qXZd0LpOl6lJ@j%vNHecudA}1(y65rP>#N}ZEvm& z1ckqzzhHJ$W+N9#(o4Uu7u-6Q7Se^TWB3kd1;Cw7ZV5v=SXyfd9LjMV!rS+@gs*O! zm$!BL+*9yJT5UUP^T;aqgg3mn^bN6^4R+tJP`^YP1d(~LsFT$qp`}iy3{A#=v@i8k9FjumY z^;d5dhL`?bia;w!NEPwr&F0>@NCz!=2QO9%k1hzgpou)jGP-Ot!wMbiGP>xxfA#}; z#X-*81#l5Cj)NY14B#PV8~{7>8vc)8BK-F_iO=W%9xiFv_w)JK9Wg^iP5!O>zoU$R z9?Q}WwD!x|6hqD^#Y4_8l|}vEhCksy{-1__@C82p{6hc=DF5K^C$WJ&xGyIHk{bhP zZRq~pY`XPtQ`g|&{hs5^%e?hJr1X~qBhsHFg)5MPSep9fsore-8~bVV?b_^{CwigY zES~MJ;mZJ>Oy2J_9w|be=)h{bm?%hAI*YVoDdT?)3bq-~PJ;6>>e_9Cc;>%Kpn;VK zv^K!974A7H=t>+$oLE-EiYNbaEqOeAe z#T1i~HS@_O55lvP{_@PpK@6ChPLX1F@s18ttEm<(0Fp~+W}TaK;HBJO2!L_*o1%;l z>&fR_E7mVs$y7pY7s*yv0mG=Uz~-GDRWwYrN?)|Th--$EQ$O~B9@)bK9{abu%$9ces_~BID$!ASWM&EzzUL==0&M2Dex0K02@lub|4kR2tXeMj zS|pL+-R9)b5-t4j+%CEa53fm1*&a-wg|r)Vl#Jps?oP>Zo`c7rJVFA!Lp{NqothAl zWGux5ck}|_B(_=DzFTG@u`5=3#1Z~!K}<+-13d#yCyzEWmvi2aNeGL`>(a>! zoVcZ2rp~bjWP*#nQNF9eksMQtI~~d^cd33^4>^#ywVIr75yG z%2#ZjnH4BrVq+f0kGS!M6-LW|o!xk7?il0-{YjK)KCZ@#b!(l)<@c`lu9SR=N!??f zBw$M)5igv|ht(~`B-50e9HK>eRt`YJFgYRgS$ikQXBhGSvU=%nRr3dAk00Fle}A9+ z&jpZk(){GlkODt*cuM$_Xn?Duv*q>~-wOY8;xxL5ufRZ>ct_Meg@xIb0&06Pz9TRqhL<7;_}|Kf@x$HIX%LyA zf)8*>vj4uByg1u(gR(`DrbI?qmw+*_GkMuVsIf(G@P0)!RlM~_J?HL{I=B+;K~e0s zP+Z+6#-T|^FN|7y0T8$OD5h+Gjo>&NP!s( zB@-;Bun_!1gE$S+5=1CAiD^gSZC@bCZR~O!yYpztj@XdSy-(NTy}Rd)n6p4e{1*h} zz(ckD_6B}uGRSy8R+d96IsX&gWPXHVDQL)$THk+EXNpJ2F>;)0jh?8T<>-;k2^{U7 zhPvQ)*s91Kehb@GoHNP|xf-g!3iPv`C>d@5y;*FR zm&qp%^bUg8hr8y(Jl+CPvTdhb(nh<~$N>g>CtJgotW8Fn;!(J*Yw-}$EEq_@s9E-5V8R+8)gt%b|>3!{?4~_lj%42=v}tU@|Ab? zA`8&VOZxN=TA7Bc>3hhW0o2#o)z)Z#0?yCd{v(=X4ghdL1xQ{HYXBwKtXfluH5Q71 zd4!;zW>heRXoL}s>x$bcWX8!8ETf}_Z(|y$t_k}G#SqA(z#YUOjR~u8H#{gBi}0A^ zg5SX{tw2b;ev;+!YHq|8A_~#qQ8OPj9YREO;sku>wDBdu*lLv8=#Ro7cmyfG3aePn z_%Upx5T8wt2K{TgYAA{83OWj-XpKc-thbbyG`IPyRZMj0%rlHifU7wohb>6((J_oE zpy+jMp$tY-_>kgOvcL(oKSA6hT(2)7Khk;U+4I4OAxPc=h&`IxoH0%ZlWVXYu`cV3 z@dV)%o`u6QH-bJ6^Po1GP{H~I>Q1iq5Q!eRYU^7(EOrDK&;P|UJG?D8b;4VEAlfD* zmgU%L!kgQObkS@%pjNSmAXVtL76$*DeR&kO`8zIndIvcjD`{pcx|0~&p&0vG8Jf5z zMnXTW6SWG_SbB-Mt3hIz(XL9;HXZwVtH<_xGwIbwD%kGZO9MNZgeZ#HyYbsjB9s8c zbmLQ-tnHPA{{6_Su|^>#IybO1{RPP`s(KVCP=*Y#w@`jV+;s-Tbc?pe_K%wd2N1%X zK#3dD)U;iznThLKVsfZ#oo0gBL_LmS zur@(pnjp?I@t8;v+=pUI=$<&ju;O3Fo|c51013hHj9K;WJr%eY{+5I6c|Hp0Xyl*; z$`PW|>evCif5w<0MklAIw%rdl{YwyqTC?g`alL+8>08wqy+>-6PRUw&h0NA(}#JpbL1umZrE^fcAx0{DA%-to* z*?HF&o(f0#dl1qkkZ6P{A(7XKjAY8&@-1yIj+2-f(=H46U zk*mJ0-9ikfqh?Bi4zAS70Y1A`Q~Cq9+r!D9{q4D!3<&x@<;CW%>*;X>AP!BT;c@)4 z#9QXO&qP-oxK&@~{g4XJTlO#dU~_SRqTq)sxgRW^a98lVyR+49+J8-*z4z0dV9uQs zAoj05Ni1Too2z|ierS!ybXcJjP8lkqdpF*v<6?C9g_3|?D&%e5pX2vG^94PV!JPLS zaiUM!u4J@~WWe8upnNg+L_k{Qji1V0rPLSepuOk5zw>$T$eN7L|Es)s<2o|jJ)syd z+X@K6Y2+p1=I6@;^P^?6tmWP6lX|4UpdM;Z$n9 zg9EgxM`hEZL12-@0%GjhRF$<8{`lE!D8uLxAm?rTl5?>Q4l>pW11>c$Bo^{ntOKAy z^fNsu+X-Pp2oYqler@+bW)Itr`+YTW`~I)=(6~CAmtQqJEO~#BFkdq zq*SI3iy`E;UYOhz9nNvOFBaEJZLKf0D<~MpulX&UV1gadq*;$J$l_gG)>|@@yev=-K^889u!G+h=%V^DW?%+4rE~q+r23Oz zI(l%L#7}tgWo}9Q*XF)n=1R6z!E!L9dsXB5oC8_0y&d3G+s^{S1;{vQr ztxcyN{2x4WKJ%H5^W#5Ee`aSWkden&!MaZObp8n_}rEeqTL)iG4Z05T@2NzQ-j>Q-CKX?jd_sw z{#@Y!=YQxRU0eBB0j65ve`+5t}a&;p}>kU_`CC+s=x`D+gt zfL$2V!&T$Iol2@x4dpk$q3tyC(#TqePc!glC{9lySF_ZvL|l?IGG&|jgfP9H72toZ zeYm{(URao(g{66$1i@P2gmIhm(qo)a{@ZR*|i#Bh@yQIkzJ4OZ-2y_PMV;0hhN zo%B1|Xk>4chJ9nPHtRI6{;ELjJH?}c2?3}509@_&?ghz>0CF(_{dVI3&5ipz!jlId zicbOQaCFE&p&hS0AZC3e*f?iWWY^#@&>m^sLWlJbOZ5Nmr6V8?3Cacc5bb9WA|iq$9YhNF zw_|5%*+3~9+xiXag^ncAj3uo2HEr5bfG|U&jQi#mgok0lL6a= z?6hH(h8gTmO2=40P59IFuX6$rdZZY9&S-xao&m|fRy-%dXFhMnyL79xiI+wn=!R-V zR+x5=)GzKD`<7tCVt9X>wpM91Kg^9PQb$|3#0SEeJf-6eJImb_2P$Q}TD!^oPi-QZ z0AzmjlF)T}-xMC9hQRhwC5xC2X4|s?@Mkq7jKVh7*g1xOMRzRvhwfszxq4Uc@z8e) zD^R{Rsw869Pi^q^zm9dwic2Ok%j!z6qYJFFHe{rq=*pS#Tn^6{8&qBw-{I3&?KdqZ zs`iFnSfTttJcUnA()f~V^Av3lQNhxhTCx5ePlU}9vBF-f{*_$dO1{qrRAHiHUR~AY!zka4;Te`&)Qm|s znRga8%f&v={4vICpzHwi07O$jiu~{V5nsO#Lv4Cp0nS7i3Sw9Nd-nu4(J1Sd9II?3 zW=pnNuK}0^xS=F3DI!*i2*VZoG9Hv+0R$t`FXezQhdN~pCxn5) zVkz2vrzPv1R6+~UMB+j-8uXpKV3gu`PsEyV$@};fZb3u3=%oS87nPFkFY>TfIP|%rtw3_36BXS9wC5UMkbwgs4%Tihfy*@bQ_7Lt50Yl2X8?GxZi>cUKOtZHYa@ z)>qY_)3+OMgjvcYc_N$NnX1lXW0pzQ(#@YgRVGd2_L2!4AeTQX%efya;OM#bsyl79 zyyS;}@(ZZtxEJw|7mpUS*%4TGTA-d2~4sssb z^vHZYxIr`~k4Q<;18AI~g3YU^3L|+Ei!QIUXJ%(iVM4c7)cH%__M5wzw)3Kf-D@9o zmH|7Lz8*G_5M8C|bcr~KJ!bBM^f!qJ3m5(cFE(uui$2xzUWJD!3qb&*JAF)I1_L9g z?a-d)08|n-T~mg>a#9Ij7Ejq2rA)Y^JhpMd0x!Oe&_tM46{Mu6Vj1dJ zgiAsx>inp8(a8Jkl4)F>WN^00yC2&Px%(V7!1T|S6Q^ekkG{Izs$UMlo?{r(iHTHf z%=4HYwbG!KQhT)LZOL-TOO0mRE8+SU13@j%>`4CtZsKZF z;DW1GN}jQ2CZ661$s%q%#NG^%2JGVfTe(2xT`>^GQ_8tzX942SL`RSFDwJH| zLyQ46t(K!)-EC4Z>8{5KwuYs5C#d0bY%j9M=4tDPhC5NgiODbXn@?Z^v0QJ5RI8k+ zY!i`W>{C(Tp?SE!v7cMVv`TS|Y^Tj#hetG&$V!#Xp}> z1JvHhKdOH{MZ-T@W$*c~dyM*F{)eAg6X0{|eRoAI{OcrZ4KRD~CjZ#q^<{n%=`gk< z!sak}iKSmzLtdx|#bQcf*chDcMNfx$t{3NYBnPg`72PO*#-$CHtWJT?F0QY&Gd$F_8o zYt5aMaZ)td&mwq_)*48YMc{qH_I{6%shh*RepO3M!4U+rF{EXKQ! z*h!`0suMkqGKB<= zsJ%(lrP@$bm`+z)S{8&dh21(M_sYw9apu2quauG*qofZ-PC!OKjq%6)n}ycMv(b3zq+?NU18+*f_A+zgGww4 zUVwZ+fW?Fyv%tq6I|Q2heP{us5+aN&rE_56VA^ie420i0XOloW5@mXCjhk@!OyL!u zeOJi`hl!`ld&oe|r_e})zyV&JVH0H)@U9>J8WjJ+k$Kf`8a+C5dSpwmOUI8SldrkCOaR~|ynrO=MN#qg%avCCM(9)8mo_ssz zS-LE8n=XQ|Ug2>60>n4)7n>z1Sj;-uf-ED-f^4E)!@i$t7yQo=N&XPUda;#nhf1A! zfK(d)u}hhVgk3M9q0-?2JrY{piiK=3Q`DrOfIZl^IV(>FC*#;>-v4nrs<*u8YU=tOggc+YMMxg$=d@!O7_vqh=3%tH~(} z@T_SP_@!VJ248%!8Kr-TVkrS`OM0ee>zK$o$$7TW%vs1M#|kk8Mtd^|`h*{1aeGg! z)#w7fZcXGrTy`6VHabvAwkKdGg(;_L#X8-xUts0|?giYZ&ZCu9l6yff7JK>&!kJuv zHy~j-*BlZbN?7ka&P5Ox3!(P;KXSM%EJQQNh;PT}BUXXYgI+EWI1jsL+~iTlzasrh z#+>XpJ&EEv*o&C{yaXc<Kk>3F-TQ!xkj)RoSzuiBU`R&{Y{4+eKxZ4LQ^1*tu~_ zn!P2ude>)Y#F1WpEue#xXbFiZ6J@ z@Mh$f_b9PoahunGcu1#gt9fzx= z`jdCA3^h|~gOC|?kRA)s53tr+9qOR@grx+GCsGWvBU)?GEJ%Wx-Zd3MZfmzinC7ke zIfH1E7VbGmcVxCj$1*vjzX(!VdSxa!CyQCekPkULg~EII7;k{`nk2%huw$E*vRJ@9 zHtZrJr~J6Wf{8mlEt&~FFNU22sj{IPen|&{6ppM{paQ((WNz}`c*y|u_Cx>!Jsqk^ zK>L4JTI{I-?TUcAq1wx{OnSkMy`LQESD)ICK&>OnM$#p`ia9)PJ<{bK<`n%wIK6Gequ}%M<%k_fdF`j!+Oo#@-g-Y@?fO}t zKX9A^jAHroKk7WqWRk(G%ke;|?+N4f?AD&d|3mMOApjEsy5V_3#Nxf+741au@9p2H zvuB#AA%aSB^96rE(23{=jm$|`?Th#OZ9bITf(vih9y4o+zg-F9fqN>q@SEp+ZARG* zQu+^tGW|8UGviWpm8=PdWvY0yddkw2)4DmW(DgFvnt#0hm|j~L0LAZgdj_pF_cd{lmUT<)3DMrqNPFU$ z%vI8Ly|7N1*OQy~A5Y$QEuOwN*$n_k+gh9LN4zZ|z?FYaV-v74^Y&R$FCit-=`mKD z`()_?k$MsI6Q0Pw|AFI>CX8LeXh~t1tbMMUDrt4RnPoM}d{QC$&I(U}Wm;f^ z*UA>B1E`3X-S=|jml>q|zctS<( zl0}{R6)(SC?R=%J_E{sMEe&P0Dw=93=Ix=nuuMky5r7@m9A+!J4B-d-x?{vCkm}rZ z%YxoNxHooh5VzzqZxrx5V212SL&*trT^0fBk9P5bVTQiCehLZfe6kZJvuHo7XXXT5 z^^1kJqb$j(;yZRMu$is4Oas130Pu7`07il)bY9G7Wi@xkMCwrrih>Z?&E2u=!R>7c z7>)-al;5Sny#z)q7D(nm67FJA{)W#V(vp+fQ6m%Btdm=+ie;A$Ru@L5#T`;ga|8u7kwr2pHTJ(|pb#q!1JH=!)MAv3D1{X@Tv>{A*Ocw@IvbRr zJ(`GsZfQ-kFVD52s9!KDXikaBXMZVR7%BtDApr4`SrYT4R?-1^VU+tVo1%Ie1@$SV zO;O~^O<$Qu{iC=CybOE*{8=Xaf1E;Wzx`c(hyNp=T?Yf&GXZBY08%cvlV7*Pu8k6~ zKrkyE@$?^i;Ak)Rvbq2j=hwE zxg*O~$E*yURk6-S7tlDqv1{c{k>8%0UaZM`d_KSKwa+%UkJsn9$6YHX2+-&%SOWSf z@)Z2b&H-({-nA^@*_Z`$o^NPYW3 zj$qkaXNHZjC1|mkYg);Z5rciFUM2`_!|(11IS|eV`Yg zBa6pwmAz}wFjEfUTysNTkgULI=c?-J6GlJN?Rw6>?`oC7S5zCdLy*)5%WXK${s${u zkZLbs=o37xd3ES@!Ty(9^?h&kPOpqxF1AQ|0KfH5%LC%NK(>*u1-nyIC2pS2$M1Q# zWTu1YgR-Jmo6IV^zMBCh^BsP?OgyplKRYwj>uTk($aOOe49;1tDp>+D(c=qbzWlQv zbIO7zH@}%W)#8Sm;@-fX$Vq)>@vz8CB_V^AqrMKAaYlN3X{BQbvMsJP7GwYr<0xj0 zBr1n(bn)-Mop4vznidjM7xHiX0p%!wFM|5Or9*&DHv9MV>UmTqF+Z_fRv}adI(ud}H0A zz>W0{aH>|J>qdeBx=uh;uplE1f2UMuj@x8&r3WZ6&a_JqgAN1?31Kx&!v_~ON^B#v zbV`P?WGzi5Bwux+EhvlXzsPrW=d&MU@R~cq&dxr_xy0pBf2p!f+9SPKHcBBhWN^R9 zy}TX#i<}Q`SqSLh-*ypvaOf?-a)Xsl9z)@CnLO!SfL6o8J8jG=IHX*&YLhE-*!3OU zf4&}bnV)9Tt28|flwA2Z^4#t#I=mOsFqs#5;urJu$XDI34nNLjXMzErsHCXUZNJjBm z6Dq&hgS_GPP^b&u(V6##^|BYbp*!sb?`_{}zr%Q(+r7&40DOdf=i?FpOzGoa0H5Xp zsA~X@M}Y3beg03Uawvd;8%70Q{6AYv9r|l&|C`Am;0@>FnH|mc4%|(PWHBab1;4O zHdS+QJNyA+WhFvr8P2V-zpAUjxs`66^@xi$soeE&jOZ1Qr>g*U1k@sb2Qie`6ZSo{Rw#y@}4woSOu6% z!~YTGY*#)2Ge?fsfa8u`Iap0Lf3rx?2V%G&Shq983ntO~Apt*x+J(63X%Vt9LQ1O9h0{mXVmHF`)(q07E+SR`O+^XZ90UXBzHR43tWm+D- zKsVpWj`#I~)8olLBWZQHgn zv2EMQ#I|isY}-!W_vG8PckT1zRGmMoy1ILHcXh4qh39^*8#6AF;@Of*GHpbXFlU~E z#6ZhPjC%4XOw!AcCpH3P8HyJ$U&a!9D|JJI?UAHI=3tvNGAo*Q zw}sSCz(b;KB_?CUt(F=lGWm?Kjgb$_`5db>IeV9SbSafFxSW=;fs;!>Qt&VNHtto% zA@~?8FS%c2S5)ZFy!gtJAZZ#&a-^{nWldvYb~aQU=7wuD+MI&(GR+ zUS|Pd@A{s=`D$cIFDBk@oVVZR$HBJ1gKy=dpFZ8=a<1hGaHQo5*xB50btQ0o&p8X^ zk@~}4e*@paZvY|^pVqzWP`kf*pd`nHq|qS~#!Y!B^828%Tw1Yi95o=tx(;a#Ogg*{wquxboRj!OHIEWsi<~>mXg^y**?gU>81uR{ zko(st`F9SL6-t!8H4`1w^jnaKXRg~pxj{Ojs6de-V^|(ac0IYVM?`!kP6sz^E$gIC z;J?BB^sG?W zsdY{Fi!3kNf5$gv|FHD@Q4TZNpB*mc?sDnN4CAr$NatYH$XLz&u!mtyYL_-PXsTMj z_4x})E_cj~zmHax&vMXn&;%%kr#mxLJGmb@2-QH4D9_<8#+{`nj3k=#1Tz zrfo14(nBy?d<*;yNB(#b&%^02KU<;$faQ06x1H{g7NVksVg+5}nIlk1wp^8>g;sO< z`Z7cY{1pMjQEWd11hDvk=T3&-;#vKnlBy2)#)=pslXRu)ruWzQOeBmDD-dH7Nr?ut zR2k<~mqYs5NN`$NrVm%DEt^Wo7Xs=RGX6QwkOzjwEjX7g{=;{OMW-3lL;eH}h9MJF zjdvnx-E`j!pRM#$$;0u=Qq93EQFEG0lr0iH0?25!5PYGwP|!2EdD~ov0z(`@{U&Z9 z6kKED_rDYxi_nLml+s4hpg3o%QWpA`d{D|0l+omTFUJ(Yu;kxikcnmQ%;oV06kDm{)Dpeh62g)om$l@=ixKf`N`5$mYs0}^KYBR;D5jn z2B!Ao7mHM7v*1Z^bk6Y(Gwis?ujTb$f`xi^1Plcp8#0X#R1pHCJ4osps0n{$8mTUx z5A4{8r&`=EiAyNk%q}Tr@T^>dz1ZG(J`R>Nz7facg=)qQdk2Z!8jJ7% zF@97s4fQ`VM{Y@0gnC|ngSOzcbSV$L%BvK_l5Uk;c@_epuGpOy6l zrjK+zu}RJpuXE;`iPke`jr237_H|Qr$UX{z*`V;+gPv z9>!VEmBCII7@A4}f;aebZt`f{)(AIQ?zD|U@y2F?URYmr-J}M6u}nXklR{43HHNsP z0{bYQOoWWg^Qip2gwDC>-A01~vK1K|{Uu33!lUr&nQ_?9+pNA^i{{Ja^r7+sY%R(;J*=m5-vAn!3&RZieFvf1Mp8$S^S{5FEx;RmyTa^agf7h3Xv){&^5(0; z*xOm_6G;6g49Wdc-Dt-G@KUWCQH|JITG|TYdsN54kpo0`Kr%BWuGQ%LFwH?GkQ(SZ zEQh!N`p8|J+Wq^B)!ym_>O<#9r*Ge|AKd@|n0yJqKKEW=<9mE&?YuY%JihlKd&|>) zeNo96^Mc7w1NrY_S3nu;G~|!o>B;}A$ouf4-1j?|P|zoa&Nc$}_B1qGebYs2JwLvs z7IJTS?ALinAm-?7%Y+UB2AKXJ7bA}U^dS1NOF)TZVZ9uj0SGmP@`o6h1_f`T1T||n zWzg0wzonl`U_h2)^g*Sn{EFjgmaZSqN%<6YTy;@V+P{^^M$vL%8WM>~%{hlMm%&eS zk`dB!u253jozy7zl_&0r>Ra;i8HJge;Cg0B!Geh!?^ zVJ3b($&LJ;UCedlq1A10sOAvei}I*#sDbI7&*EvEVevii#r;ofGTpWML;f1{39aeM z5Cu^KytD>$j-R`Mgq)7X(5F-PSn&=}%W#EDukLx<0>MW=N$M1589Cw!I5`E(%!+*O zc;0<$%P9c%TmLoUM+3++`RV+)n{LJ~5;MS7XHDNv~7c4gy z`e61rumD@@J36f1fHk%?wjKa`hPW(X72!qaU7&lejIv2E7%#6aRKFP9CFC#dr@VEc zTTn87lmDWQ+%bgy+Zsj|R(~C3{~!~cnpeaN0_c%|pSXS}SnP8kk$GZ3_QL||BL{MK zy9R@1Yny`%5P%vtORd~Ow+9TNINK?Pl-!#kZ#q+PVx5bmJmXl4Vpwx(%7puscpn#h#WjXH0ET}a9NMe@dAZ;Lg`EzP?Am#$SRr@ z7I9v9?iEB zwQ3hKRV=5;#l|j9Cyrk~WEi8767RAg;&|vm^i_G72_sl2Fn**sm}s$qI3Eoz9r@gN z@)JI;rzE}jQQMn$7qO$k)Udb&)%3WnwuhEI?b#v2yYIbNs4G2H{SA`WSM_S&9nih? zz*3|B>~X{LX~Y8m6j?P-CQf40OQWZ&^4ByZt2kz*E;Ge^JFN!x;kVTB+sKQW?VE4U-FX_zsO&k zm)HAIEVao75aUxhoZ+*^?sYdbNP(`5-EzqAj!}3OiH{hC9okmVUU=9HGqDA=h*>z) zelt}yD{v>E@0xW7eh5j<*6e^Gx6VL+9irTz=fJ{k-XX1zoZpqG(@0d!-g02*Xg%?)*XKQMf!JVB!o^Yhew}lYsg7qiPEhkpYxNW*=+SWw3e*Yb; zbu~e~?QJjN8?H90mC6er_zASX+2~vsOYGU{eM9G)%Jr4e({BS`b%l;*Cco1GgEKkV z`Z*42*ldf?aF}9(op`&oqrCj0Hi^YBV&F74{>s_MF2yV{g#NOCo4By5Pn zRn3{f9fjs=zlZ+(lG6}c3EgQKZ?BA3%ro#Cc2LXJKq$*D{O#C@U^d}tcX=hOFqBo3K>8qynC1vDu zxkfEV1Qs*%u7oMpS_lhG0aQd$3&LR+Nd2aZ#}=A@_VcfmBDD@_3q;Al5brDE4yV1w z)MBz^^ToGy909O<-i<-;psQ!SResdR>g7^U8kaOS&l=;xtui47NtkBh{ftcR2v7Ep zt$NT(wVJ=xguRYzMuO`B>C*2?O6Q-+T|&@1ZZ|YN3`pIEOd(0*apl=wHes zkA!p_3_jtmNEl+>9$@JifI`Czj4Nw0g*k1b546T+`6=OOASL&-6f!2~dE9tx;BK>* zjhJk!m9ZN-^d_R6TJwm6r8O9d0^*JVO|3|5!# zRZQls1fu|f3CP#TZ?geyNms0kBpaj+IA<#i?c0ybu0TK=B()}gcC1mV{1TI1MQ!~2 zHw<_3gk8m!8HMjtX%oaRv8DH!VgpP9RFC~$x)Rpf-YA@IO3ukM1q;*0LrslF{9FsGcAm|x=9U1dOG>9rK;A-Ae) z9Vx~Oo|O5SPr0Gq)uW7)Bux%NNX?Y&I{yK6P=v1~fK4_;!JA^1>6({pV>G2IYKfo# zpy-ZWe)Nb~lLy`+xt^-H60m6LE*O@p2xpeedLeicl6O#pH6YQ=U!92gIRt$FHL`1U zx6*!(IlO%Z^jPKR5#V`0yS;i_^NU52f67o!^Zz?22KzXmq$d1`7P^+Fr2xRT$wCMm z3R|7KOf6;;;{CelTbzHq;7H_m@2767XmW1M@Z2f>9ed>ULs#4O*!(o4k*%h;$+9Mw z;P^;U2D8(gbO6(>ebdCY-eGsErqi?fmD(9cDL~&x9}fG&2bziKtUgT;f~Os2vQ3|V zgli<}#jSs2Z1R&O%wj27?Y0~G2t%>5Zbq*%yp7i}b9XRA^IJHfE?V!E<43y>QT;kh zEXB%rzAzJjIk=i2pr*1(+S6nyqo;-97C49TkH-0Oejn?qTyXhMijRifh0RkDK6uoG zO=9FfUXji!5ZS8`Cs)nTZQP=bN-luLc*DpL12qr{QV@hm|jEJ_+)C-h}Ua^A_xcS+5=> z(V~9Fm(N7`6t48E8M$W*-nw~MPg%$AMr$xQ{fG{AEM=^E9`2e9KL(S5%F&#}wkHcE zbWnKa3`luny2?#orP7+Bn;(bVVJHAXb?;X-*H!We_**94l@&)&LNM{YsI#wuQ75a=$axHl*|{2&@=zrjdf7rH2X^|X4( zb;AvuSYbJ2|MiH2I^A^n4G>l4D{L>l1_3Phj4@SQ1SgQxgl~r%Csyc=AAc~(uvIaC zK;jVI`)1aEdXaJJqe}RRw`~se7(9irk#%qu1yr3%FxM0kzlHCQxYY|rJ8=ibSQO9e z)e@E7j=-^0OrHtc4eRhoeShO-#1B6eS@Sh($A<&4gF`5tqeHhjJb^PfrolA@pq-o} z#gih9NEJr0k{j5)kZZd#2$I_F#~MdqS|oavr@;8V#sXf4M?`D_>r03o0mBnh`R}I< z#i4<^<9w795gNzt+l~pJb-K1}K_}S&@gq+=h!(V$>y%`gkPxYuUC_m3iS}d@1a-0q z$UXa%ERsU3ohnckvXg|d40EE!0go4MJW;tRIh4|y06i+xrZuH^ZI*fYCYnumVwj7n z7T)NqN;8Y3DEx|b<|zKNFS^E61DT^exL`;VSnpQHrp;r66A_ukH_}z1uPoCxVpg51 zsU)yiIP*h)MWFbbZY-_1;e>8#rLnvYX2afya?}#iS*IzND&&~sfUk?SE=l-zZbu(Qux(J-4vshmEaE2q{2F0jBqY;%bj-Q zn78}=#^h?RZ6c9;-1a}54LGk>3}@e(Ls`eR9JI`T2UQq3>^TGk`0VY4VqHwhV~G** zZd6REP5hoWtPME(ttDZSUcx^O6fmT3*!bP5d>JyX0r&Xn8W7Zied((oT`~(6@$S^k z(EO^B@(3xp2ySh*gMINmA>27MeII<1g z??S@;vARnqQvHU9l;!^x+%q9nsN8anI3n5X4V%%T$!h3NIx5+F-)s81$XXA;&p2Dr zuEwr$X1*D6S>i93HUso~GXw0$H? zO(k9X%#}mYmE5j<%7Echim#=5SpDmPW_kgv($q#Q(3-k&{R(X{v#Na)-wFhAm3$Qm zwSQ`ni?>YmnxYihv^4@@~=b{;X4pu zksT#E^sq~fbPHpo^e>*37#p6m?jr|DlcI|vNnKQ@D!AO8o|jCKNtbc2aYp>%Nsq77 zs=VfF#O2q&_<@%|st5Ps3b3dN7GO!1J)Der2z#>GII0E)CsrkH~f%KYe zw}4@RJ;!)0JTZXqI-Rk-R0`lugrWo1UA4fKcd%RjtU3?8C%kQQQuO-GSPlJ*r1wtr z@oLX3#6?a(`16j5GiO&jbn#6+qExx?Y%H=DH8XYuN183?lQC zxC_nAodjSdJ{_Z1CO!4xf#!CWU2l!ce{g-#iOB!nl?=^&O#L^EFm0EM!b1)wx6$Jk zKdfPp8t~NbOz!u}-NwbuMTo^>j(gxO+>~u8nLfL3PIh~V&67i#OXlTBNirG<0CL0y4Y-p%n-Ryr4 z&-@C|QZ(APIQ%}L=U;H@f2#anwg11Hu_KrNb6x8Hx`lXNDk_@!{APjGy zj0}h1u~zLR?;}Ykf*!cjuH%ivENGIu1Lv-WrDI{9`SADgy?EZ^ltr7Vlpce9A;PC_ zLXjbxWA=#NLu>NT_=0@4>Y_r^UDK9BW-4;wBN%>EG zn81$ZM5P%u$+FY#Cdc%narTvI)s=S5(ma{@QEfbDt zk<1LSOfC!gZ37?b;uMDDH5b;MjOR06N!2smWx8IP6u%SuE}3^I>dQsP34GB7lq*QS zmY>72phe>pA^(o55f0jIn%|5saeRt6I!%9_5Un>g#!P$5{w&Jnh$b7&F~N*dWisqJ z7+R-&knQez@~Z6acOf{M9CQz;*D4`F0tlXo!1InLWMxHbU~T)+*{D0Cg9@4Da=1h# z9rYKq7Uu0n!%y*!XLs!9mYOHI>3z zl^zqVF?PEv-4M8FkJNP)X7n#|N#c|pcfdF6rz#%E#%SFBQ6DcJu!5LJ|4b%Eph15p z5o~F@*R6{mM(v)Fl0tK)VjuUR%9Zu_j*c%0r+pcASAr$15%rJl-{5td#;+lk;0cqj zh8!ZF^+Ae4F^k%S?7e7vVnCYru*fD*iiP$Qj>iZZv7>wB!tG#49se#Py&}qoh+%bq z(iWGHYA~lHJ@HePYSb^_MCi3Pt{C|3o^|vHe417Q>JL4{oB_)}qw)`0qkjGPRM7&J zq7}4+psEHb!N_j{OIGt=fK~Y4ojd1Aoj~fI3HUX=`&sla;M;pgHL%vU)-L%S zNSaIi-phZ-N(0D$lGhYbwtv;8AKK~R_E#Y$F{15(WbcNsdS~=!<1hiKD+8f;^?Ly| z?Ol|5N&1mWbQmtw)$Hw`S|lt0{~aLYgtDXS62*+gC6D z9v5yO?qEv8hmgFsGEsg=Ow$efT7?m4dXUd< z^E)<$aM*^1AOxg`=Ajn+LrzM$7#9^+nbZY20aa+*f6B)Ma~%G)dFL4eu>Spf7!5kN z>Rh&zZ^=$aG~#|wc^eV#5@r-Q{)@pJv8=4uC=4dE)gcv3V+4lE1T`cKLihIteyg`H zDjMR`Un>L*Tzm!tK@Ubb>R6QrM*U zfFxuU^OG!^FQl~SFM|1Jn|`yY%HU-7a!p@tq={0ap7uJ&!HF$uqo8KE@PR6Hg#_Fb z!?jWXm7SXfe*YW#Y^Cz90mEvIHv^jOWXBTml3fWPTyJ__XUO3_fe%LSk( zl+eHD3PRF{Re$XlXqRs<72idS$Zs7S4hQ@ZN^>#J8$QyKt0hVe7(30=3YQ)Ek{5+r zCZ#VvR|}{dnA^K%@Z)pMF}fMfLh^EvM?nd{cjEy)3HB6khp)RB%oXjdhxWqxbJFN1*UyKa z9O(U7tNM9YC8qQ=FD5lU)(nk)l|S8qFYJfFnCWjv2(@h>{o&i-IFM$tC`GkDfn&Y| z*J0N}SKu`DT&Uh_*W1|&Ji9Nh3NyJwumbM?F8aXo#_#-E!&N+x5_UXF$AQ)xsb7A! z-oCEg$v~_-&LcnO8)u2nH&fQ-u^qdDqd&et(W>PqA#A${I)35GX5}R(>cz2<(lo^i z(dtX)5XN=h?&Jyk7Doe01Ha(+3Yl~;1bD<|AGO}wCVSw;*h-f5+IgbXO4;GLvdq8z zi7nlD?45-k%Gr(PuKGO9GAuI z{?8K5Y+*a>j2|$7uBCPB-?99n>1r3Z1lq<2UuxF8o-tn!S$f7a%9wy1@~v|miJ;zL zY782T&kYyUuj0pQ`TCuXN04u6;L;cca%IhezqEhi9Hp$)8NHCzSFcXyd7Eos?^jETla-C*gQYh`8s)wXw6tigt1B6 z6##wqX=zvLVgg4@MT^)Ja%k?g@|TX{VwYp%DgXLpME-*5T+{HK%V6cp4c$OcCT$y z!@}msRB8bh@g^PkVUhuB1$Jh>n^g&LRyeno3|Mq)|846&Ry(y{t>$jLGa+Ji3T@l^ z`Rpy1>LvVk<#?W#Pu3LW0)(G_f$X#?^`@sEei*sFbqPQ5+?+%-aTq1peEvRH$9Co z3$q6ilk&cRx}EWRix-SxxT$)mQ-%aKLp3BV=fDO8RE&2U{sA1@Q3^EB4^P*?bC^ji zp*UH{)p!U)1sh)6;Zh{r0Z8bm2qlR>Y#hDQgr`Dwd&Z>p`}V+Yf`xZww+dGZavZr= za~^DJoAr+bcX|k#F#pT=|<463L-YiB#y)ppyd%;Bw7WxSRGhX}GWSQVNfcbl=V$zP!QY^b0a0 zKm(2X@krL^hi7o53A&Pox+0y^ zxjh`IfzzK(ndEg+Yqz5>(9gNxX~r58($c*R(MC;CFvDJ5a1EC`tAB*W z@7zuDo{0fB9E8StEW4pNPZV1q)F30{$7loMX{lB|?m&5|cecU^tW1Q*(E$11;i9Un zn@A1)uc!}mbwd40HO#U_sq=eOk1XqL@CTD4bJDDtYT~z~ozFNNk&pa$U^06n23V=7Gb#>E#r@w3;Q&Q2-yJAt6H$)0o{j zOiP^gemeX0XdS4?Xner$e(S475TCqsar75*F9H+$ku)=;i&OpkT&N`|5NZeH;w>h* zJqb>^{XhE%%S4W{z#2@)S z862P0Hw(#_w!)#Fc5)VWL!th11L;%!M7k4Z0R5NUyM0OykazGWI)=}qPfeKzfeVT! zX1>NaR|6_NU8wsJb5S+wpk0c02hWgU`%DvH8jN> zcG$JQI81I-T1y$3&3WG2SR6dk9RNa9qcRQbFN~sqD>Bv?%jb#!vJQc973`Z9XRf`u zC5fH$GP`TjquZiq&*jr5ogL%PPME4f zc_#QHtd*Kd(jw{`!D}6E_u7O9cKzeSV<42;WlN9Lq_D^YBLx49 z5{fu8r*TWSX!Hl;@^K|gyOXt9GmNz*+CZ__V~<)-Q=hqF)`KOwgADq^5V8U{ni<;k zER;gPP5LN|GyQDcCida^l21n&y>g7tyOIa9?~zQc@6jKT7|TeoqrOf^M`nUPeIa?8 zUA92ujXc3kcWPNgqs*R|#$Vg)e1v5|tzH-pD4!4A5p2Iev#X&0u^05l^__SxL^@6N zk$hC@7|6W~Ywf~6exbzl<^NbF_D6)WJkYzA$?Cy2x-rGWYLpvhuKJYcg~Erhh$wo= zws^aY*IChnMwg+sSO^~swoD&U#0=J;0Sm5B#1FMd9~ZQT+#W~%bK9%14{qno-8C>F zl_YYoM$a|EnPCyS3{U`KOc(Y+8Uh3U? z7P#23Jn|BZgZ{^`hW$qF&mS&X%SNAe%6GqMihZoAVCBc&=4AvP;Nrh$F;8G){Ak-X zy$Y!Q{ZnmyY@@Jdxic{~m^28&zr-2PThykJI)$~V$q|;-1__pxHrPX_m6y2XBs%O4 zrc04DJKnnEkEOrL0}d@LNz|P*D{Y0)N3N|Qob|+u88P)c3vz7r6=0OSa$KLKy8)4* zm>I7xxTC(zw0UzccR%>}Cr`9J2}gjIV5LcxBYo7Le#XYEVL+fyRWwk0%$RifcZ<&S zrn%A521l3hQw6su`Y&yTRQ7IAvbbgdgn0D~4mtu9MKv!s8D2>l9=CauaVAf{-TF55 z<<~tN3FrfE_2wbS5x>;_9u=AmAw9!N08|?J9cR^W_d3P)nG+G11>$*7gToKWq6o_H z&*vP-;7G_wBI(ItE>#4t9mkDkK_1Kap_bPR*1-L+2p zD34<+DP=OQ$H*;Tp4D*r5b3C?9B(5spCEokZ8}SP>1Ew{tG3u5ek&l9t;M7y_+Q@(o1nOX52B%LctiZ* z@r0ZpByPf(XsHKj{y$?nqOsHu!*QMOK1pI4UGR_H=$gbXeBO~9L8;^bzk zwQ~(`KAYYL7}ln(x#-JsP?xL?oD|#>&91S2L({)St{?5b-=g66t|33|v4hl8#B?4x zSG|h5)n}8*V0mH|x$(?o>C9q3>tY!e7Rohx2Q_Wc=skCVHGC!-)TB)a;FPA)7%G%uCKjK9B9)IAvo@ChFjc>aI zZGG8V6;}Shqzn>kh*?%uS|cAM#x+01J!^W}^S!v*7NN}shs$!hz)M#XRTPcUF<_b$ zT}%bMrcm~X`Y}6J2Tu0l4SxMTc2Y05cCGrDE_^qQ_-NT9fyJ>%l68utR#F-Ob4eXP z;v5t)hE0=ED@m0gH_=$tiQg&Xu{>sorqzB1*uvk_%s@6t@7iIFgu?D|mUKIgef~~C z;>L+dQp{FLHKrgKI+zpx1p(S^?x}NeLFRUU(rt!v01&1T*3a~SgM!?khD}0|2nVwR z6khXt{#kOVq!U1rzc*ffSHb!7Xm*?SQ|_jyIqc1Yki9jo+B0&Bf4vJk%F)Uw4~#;S z@)ordYiwHQk(K5a0#u243f+3~n9D$q54L&f`i+0cr>+MI|6gK7Z5O2(Ey@K%0tnoa zodVOtIy3hRP-$%8a+Td3naA!T~z&Kw>WTq-ELEG zN}H#D&7SvtqMaQ6O^g?GnFihnVFrFjmf39UvqQ+g2Sq)rV&GZB>k;*Rtt4_x!sS%r zsXEc|e99^=tRPT!p8Eq$^}p2}N_0Lmv4+<`axhRP7n5_Jx-=WNj&Zc!&^Jam-vt2A z&YMrdr->_hULUMq06zkkKMw%&>Lno7L;89tf34Ew5RL%R&|OMF?u-fU*jawpy`T49 z`gQi5Y^93q)kSxy%|NwK`lh%ED?5_XI0mfT4A*P=V;t1rhoRb#QasdI_U}E5 z%~=3sbd|W2l|4i!=CkO4-k#h};D$#}i`qRMpn%>Y-O4DAgkies$!m)Td58!G z8H#jgvNV9|Tlok@*5=JH26d3(2C)BIt9=4Ie>b!I?hTTHyxD@@W?>!R1dVxcA=eNA zJDMpv^BZlW*Ya*v4)sq5XY(6Jx-d)z!)+KuNDUFK;b-kryA0Yn4>KE$gGov5qvjJK z>jO%=II9e@Y*1}^Nm01MlW8hOToJx$@9Kf{ZgqvplmS?fdB}etV>Q8kkix$>OCg_I z@t?>492Qm*L4y?IL>$EL4@C3`|D4{XCPGv#$i3YDDZuiuFOiLMIU-IAW1s{hYnhDW zKGa~PEMss1%IilE1y4HU^um094{tQ0#F@-@5eU!c2a1KH@M9JBc_Eqf9s{NUoze96 znj#jzwa%kpBqw~$ofG8K;*dgfFZ?fDz1^wr`_LI#W5rQUeG9%9{2JW}-WX6}#E<^4 zK4HQ2N#}HZsuRM8{;50XZlPvpZ7oOOygnnMAJ&s-X?zcwYgro&;n+Rh%g4L|f>Vlq zLGpYYzc`tfLR7ICzL}atpOfp3$Y$XipBTsy!+7z z3xc0xoU!GW?Fu}ofj=s|*&kKgwQpy^=k1lHlZC?#hR_;WD#hjbsXH(jo zOCN3J*xv~($66?+{*%iGI5)b#ROXJK(aV`H#yW90a0q{!gqsTUB-)l0x^W5iZjtC@XI@LWT z4t0j;Q4hfU@XAXP!&WRA=hXio@FaR&?NQ{SV}uV0$Y@!?(bfxjx+}@5OY4$(7!d#Q;AiJTci&)FX*eMu5hL>gqwpnm$K@!)H;^{XU*(d}` z-y#PO(A-IXOUuwMuEJ?Dt|G-$U&q%o+)S@Ae8jgqjhr{(M!TJ1vE<2+d}wMR_^s1; zy`Slk^bNc@detU}yeLi4j~{^ze2QiPei@lS)9;a9b9;~8IuPsrGvQYM^;~Hc6bUTY@vu4* z-PXGH5~m+O+@_D$zR1aj;A|l*HPAGkZ zD}$Dg{5wb2zLKotib(I_P}K6nT(luef82yO`Lh{@=! zp1QbmFx(X3^x#xQfB|Cwa*T^NNiijOyKF-%75t08l-0;))}{pZX3WH37qJmnKEv;hflI|*|C@&paA8sg?lE=FdkucFZH<22T9EyNG$WkDTHTR{pSwAax>$ogxu%FL)7RkpS^Y5YCk-uW6{Z ze&U|~xIy9$D+4ci6+!Xr^R)b}g(1?LJQ!(`5IENOZ25u3DF}d31YILYj|QQf@?m6P zRs>AL(_#hMODb^K!OQ_Q;~3c6Yt2HiS2F5RUVUKC&uacGGp=xF?q>V1;7Zt~^yh%tI1dGsfFk z1VDuds~#%Bz>33*=6zzCZGa=(lA-A#at4d{8x~hFjbQVpaMxW}+|j*m|N6J#Ozt?L zg`SJGnEdf3Lb0ajA;mXX*Exmrwv$y;B!Eawmq0h;bxozBkJFJznlv39Xue^0eSyTi z3~04I@zdN|r+N79C^KeJ)$+7?efEcD-ymabd|5C5?X%5&MtYY{&9?A0O+EY6+RR>` zeHv5zX(?Nm!sRj*oiMg3Es-RQ7j{bR>=dxMKS&(&i-#XO65&%*@DA0eEi2~|w=r!;6<_hfi=uH5lJW62&r)aJR z>eK5k)pY=$8c&_clu*pFJ0oj&H<^TSi~Sp%Noom?-%(X!7hY58Pfp(fN8-;FG}qi5 z&6l#cqy$T!qb$eRcQ{_O8$T~!B*19(+Y3Kh=`C>iO6PO*{M{`A*cLC&B_Ct)Sb4+j zXJ{Gr272vmfKv=e37LL9cb$Z;LC%%jrt(M&PPGKhvFGl2s)`sbw?Uh#XsO`UMhKs7XG@ldsR zjZ@y@m)s{off9)p2l3!{1YdGyZszR#j}Y8$2XnX6h?&Cyz*;70qqH%qQ|iZ|$+~q% zL}^%SEA)n_al-$YSbC&Xh=mcIc z7q~i*Qkf_b-Mf||%Yj@*dT;cgSWJrD_+_I?mhf-gv`-yBxWF(0Lr~BVo=hQ(3#HEY zV;}S8$iz@z?a#uIptA8Yd=g=oEP7Qi11)3mAwJ>3T9<^~ct2&DvBbF8tu^V6v683} zjIM_#>_pz?ZYgol=_I+|JE1V)UtflYA;g03h%NLsq(x`Eeii76(dMPiMak)x*3mjh zho{l0nkDJ%`T?GC0M71;7>qdC`bj!{cJCYJ0@wdc{ndA^A<%HW=$fqGxbuIpX&%>J ztKAa0JLm@ZGIE@bfy!+7o8hP6=3#J_xMjW-mc>eUcFpPBOFpklC~Firq!p&tOj(!W z>wjQp{M21+OCpWC`!#bh{x@g{KO?HF++)AKTUWeb^H71x_4s?`t zNiP;1h$VM@+|y9iN{-*?ro3s=u*HcoN66A8Wi!kVPHX0g)Q2gf>LI=AcB`92d5$TR zH+QFqst?6q$LwAMWq3ZQRYtcA+v(64o3>TS2j~iJU08bg%}<8oozyY&!x$Mjyj&27 zTzLzt2A)DogEvQlYc%Q`ZD9H{T}M{+>>c$jdxI(T#zHG7l3HVfjCrRn_;N-PIx*Nx zQm~d9)WlFU+8WAKl_vx*_Izr@-C}mHJwE=tDV7mhh3s$yd8LW#c6KOXZ z-9W~4HJOhis?hi_}M zS2fA zMLq`D-eR@p_phZTFYP%mgqH>ohbaDWccY{pbeWcRcO&+Ws5S(8nWFNX2DSyDKJ=A-)>rZ(J|SJkK_E2WBN2cZ1^reIaEHZ zK3XEfL4V@cQJJ(#RMAr_A zMJBeBSj9Pp!#p$H=rABc!!h9p9iknMS%0K9NacnxSu=*k8XR{psUB@b;SQa%9*b})As-7^DR66r_BGmpvT((<7^;ID;Ql@pwJnI1jp3W zYkH<62LnHpmr<`-RLJa`r{HvQRbA}JJZouNWmTn>JIl8&5>3MYcq~>h&Hl5xVekK~ z=OzBfVjgv^Vg}Pr2jb9=ObygS{fHrBRp-g)tS*21qhp1*Fd3>-!wHLWk`&+%*qKY_ zOKehg$17JS-f%fc@k{}(slZ>$mTe#^Tc&o`EIPjWrukO+JkC?-|MiGs;57MfW9_+} z|8sMzl>Zj;nDU?P+GY84eI}>l%Ul`$lV0o>I*gNByCnJ)YOnM!xKoi`n*UsKtEYN$ z`+uAT;Ug=7Q}@3e|GT!izFyjY7Vi*B!f3~;RO8@VLJaamC>o`xfAuf-5x+-gH>pt$v#qP=WqAgj$ zq$jukm1%2X=l|AvPW~_B{}=S=hqJnm0B40`u@ENvr&P(=2~8o}%1a(O04KQk4N_ao zjVSU^7|J&T$D&_x$JQ9)Oir&^Rpp&2H5@%W96QCWq)q(ikl%?|# z1&JT@Ff=@a!0A3soBWft`s55>92Ooh7MRx;%L;4dD)V^Nl35@hS zQfV4@0}KU6qz0BY3L;z~6%I+5GrLN~>!_QXun8KfSF8lF3Vqs=TP5sRiD_qfA>ys;b%L}V_%xA4nvx=-hrGGe*ySBG z(n;kUWPFr;#V;$;P9WuJhL9nkSO6WulXnSqL_dOf^AH@|&lrcgWqCI_#sq`5;0fJ1 zuQtCQCGm(R*)91j7}Fhj51=J)1R?N{wL#nnVD4`635xu&k!Lo zW$Y#%8W$x6g14sz4`+TKVVQuco;>+N0EOf+W&Pk>;nXWsrbKJTQ>gZ>Uw$qzmR7h{Fhw5 z_KA=$rVald3@}y9g~wh|-{5sTqc?9T&%qEQ>Mz5a3iPGi9yZy=%<&&Zj`R=D|GKfZ zwwcTSx>4@`g*U+wOJSox32joAphgI~}TcV|S>T9&2V+?{-D6OaF6o zBoB(@;9}{CK+-hrmMDB?gCOxiM$2w7kt?RC4Lsd;IN|cMXfw?h3M@G#^l!C5QeR*$70n@P~@Q0PHrZ4tGtEg1iBXm25Y=pF8cgN8GilIM;C*S1$WQ$RRGp|K%Y@VT~P&DoBy<(f(8 zZL9VI!pv32nXz__lhR< zfM&gVob(%h+-(f9Vc1A|-G6NTbL0Dz;(=A$sBP4rlap6%0zZ>e_A|ks?~D^fj{iT$ zhvz4UuTBn6-!Nj3mt=XIL``U|$;Gx9y5D3w9YpCSAMiQ;v|PP6;W#M$AAxS`Zn~{c zpj)fmK0H00gKTWLoNCIHhsNdECF3G2BW(iCc;Z)kY2x)QU8+#K(*;6d&v>T6TDl*#0`$%JrNi_ogKnY3=Ik8BLmD$&5R*T&@ia6r} zi{k9Hs}If0Wm^6E8Ow&vbNxWaFq?rq{Yg6TppK^awnmm=!`8Z97%n%7jtvXPF{<1w zp%9xq$e)6H{W|9USDLz2w`z4%2<>C?p(IXIG8~6lFbXMw=2M=UhonFtWFv4VDExZx zM|1}>n!#VDHspmN)|hG;V6a9dEbEPR#|hp{=G#O6w&LdcVSMR@V9?Rpq3$g%!)=!p#$$ah?6E+PG~wF(q-}m{s}oEmYoMTn$PXy+ZMltF@E}4?UFv=I)aZE z?WiVQK|+RXR@4`Dh~qwNzqTy5L7)AE4*r!dhYyp}q=kG|Y9N1OI zOjdK`tQK~nD%aVbbD^zhxkH|66I!B87{cH25a@yeN;i(KDX6z9-(=k5J2s15J8PzW z_{cfOiw>|-IFQd|`!8IrJ~{sD#^&Z)4*zw##Q$H&!_R+&9Qq9tmEy4v|I`h!pQJ$W zDfS!J8y4Q1!i`gDz*&yBy{5`>JlZV?In-{wPrCy;^qS;T z{eNTs2(2SKY`}gz^n!@LIbdqo4*qetrs76T{evgc8-jKZ&n6?>1=%5cEcLnXY*)|BkIM@!Uk#J0l|ltJk@6Xu1c06 zT_ev;xy;7^#->(u3x6@}iKB5g8fWnHOm&)-7%l9oN;}bG)wv4}SXHtNq#fl3VJ;AJ z(YrFw>r=10lv-9cIbCX#Os__$qp2VdwCA*szN91#ESAWU{!Y%IWtwgB+Hj! k+`U3+JkV8Qm-MNmr&8W5pYkc6Kj8EK0chaV$N>5X07Jb8*8l(j literal 0 HcmV?d00001 diff --git a/ts-llamaindex/auth0-ai-llamaindex-0.0.0.tgz b/ts-llamaindex/auth0-ai-llamaindex-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..128dfb5c0ba647f7521a3b191e81cba342326716 GIT binary patch literal 26691 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 a(^tsPt2{^A*0#32y!Jme=TtWU`~m=8CW1`> literal 0 HcmV?d00001 diff --git a/ts-llamaindex/auth0-ai-vercel-0.0.0.tgz b/ts-llamaindex/auth0-ai-vercel-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e621162703ef406c02d247fabd91b04b843f5974 GIT binary patch literal 31210 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.2.0 <0.7.0", "@langchain/weaviate": "^0.2.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", "langsmith": "^0.3.33", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", "@aws-sdk/client-bedrock-runtime": "^3.749.0", "@aws-sdk/client-dynamodb": "^3.749.0", "@aws-sdk/client-kendra": "^3.749.0", "@aws-sdk/client-lambda": "^3.749.0", "@aws-sdk/client-s3": "^3.749.0", "@aws-sdk/client-sagemaker-runtime": "^3.749.0", "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", "@huggingface/inference": "^4.0.5", "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.12.0", "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", "@mlc-ai/web-llm": "*", "@mozilla/readability": "*", "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", "@qdrant/js-client-rest": "^1.8.2", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", "@smithy/protocol-http": "^3.0.6", "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", "@upstash/vector": "^1.1.1", "@vercel/kv": "*", "@vercel/postgres": "*", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.28.0", "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", "cheerio": "^1.0.0-rc.12", "chromadb": "*", "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", "dria": "^0.0.3", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", "fast-xml-parser": "*", "firebase-admin": "^11.9.0 || ^12.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", "html-to-text": "^9.0.5", "ibm-cloud-sdk-core": "*", "ignore": "^5.2.0", "interface-datastore": "^8.2.11", "ioredis": "^5.3.2", "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", "pdf-parse": "1.1.1", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", "pickleparser": "^0.2.1", "playwright": "^1.32.1", "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", "redis": "*", "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", "weaviate-client": "^3.5.2", "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", "youtubei.js": "*" }, "optionalPeers": ["@arcjet/redact", "@aws-crypto/sha256-js", "@aws-sdk/client-bedrock-agent-runtime", "@aws-sdk/client-bedrock-runtime", "@aws-sdk/client-dynamodb", "@aws-sdk/client-kendra", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sagemaker-runtime", "@aws-sdk/client-sfn", "@aws-sdk/credential-provider-node", "@azure/search-documents", "@azure/storage-blob", "@browserbasehq/sdk", "@clickhouse/client", "@cloudflare/ai", "@datastax/astra-db-ts", "@elastic/elasticsearch", "@getmetal/metal-sdk", "@getzep/zep-cloud", "@getzep/zep-js", "@gomomento/sdk", "@gomomento/sdk-core", "@google-ai/generativelanguage", "@google-cloud/storage", "@gradientai/nodejs-sdk", "@huggingface/inference", "@huggingface/transformers", "@lancedb/lancedb", "@layerup/layerup-security", "@libsql/client", "@mendable/firecrawl-js", "@mlc-ai/web-llm", "@mozilla/readability", "@neondatabase/serverless", "@notionhq/client", "@opensearch-project/opensearch", "@pinecone-database/pinecone", "@planetscale/database", "@premai/prem-sdk", "@qdrant/js-client-rest", "@raycast/api", "@rockset/client", "@smithy/eventstream-codec", "@smithy/protocol-http", "@smithy/signature-v4", "@smithy/util-utf8", "@spider-cloud/spider-client", "@supabase/supabase-js", "@tensorflow-models/universal-sentence-encoder", "@tensorflow/tfjs-converter", "@tensorflow/tfjs-core", "@upstash/ratelimit", "@upstash/redis", "@upstash/vector", "@vercel/kv", "@vercel/postgres", "@writerai/writer-sdk", "@xata.io/client", "@zilliz/milvus2-sdk-node", "apify-client", "assemblyai", "azion", "better-sqlite3", "cassandra-driver", "cborg", "cheerio", "chromadb", "closevector-common", "closevector-node", "closevector-web", "cohere-ai", "convex", "crypto-js", "d3-dsv", "discord.js", "dria", "duck-duck-scrape", "epub2", "fast-xml-parser", "firebase-admin", "google-auth-library", "googleapis", "hnswlib-node", "html-to-text", "ignore", "interface-datastore", "ioredis", "it-all", "jsdom", "jsonwebtoken", "llmonitor", "lodash", "lunary", "mammoth", "mariadb", "mem0ai", "mongodb", "mysql2", "neo4j-driver", "notion-to-md", "officeparser", "pdf-parse", "pg", "pg-copy-streams", "pickleparser", "playwright", "portkey-ai", "puppeteer", "pyodide", "redis", "replicate", "sonix-speech-recognition", "srt-parser-2", "typeorm", "typesense", "usearch", "voy-search", "weaviate-client", "web-auth-library", "word-extractor", "ws", "youtubei.js"] }, "sha512-1AAo9mvr1FmqYHUpXhYI8P4NBPC4t9TfUAuvefEImrtb3gZ60fPelVu17ljWlKJcHC1hPSHYpPJWm0Yx7yRvrw=="], + "@langchain/community": ["@langchain/community@0.3.57", "", { "dependencies": { "@langchain/openai": ">=0.2.0 <0.7.0", "@langchain/weaviate": "^0.2.0", "binary-extensions": "^2.2.0", "expr-eval": "^2.0.2", "flat": "^5.0.2", "js-yaml": "^4.1.0", "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", "langsmith": "^0.3.67", "uuid": "^10.0.0", "zod": "^3.25.32" }, "peerDependencies": { "@arcjet/redact": "^v1.0.0-alpha.23", "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", "@aws-sdk/client-bedrock-runtime": "^3.749.0", "@aws-sdk/client-dynamodb": "^3.749.0", "@aws-sdk/client-kendra": "^3.749.0", "@aws-sdk/client-lambda": "^3.749.0", "@aws-sdk/client-s3": "^3.749.0", "@aws-sdk/client-sagemaker-runtime": "^3.749.0", "@aws-sdk/client-sfn": "^3.749.0", "@aws-sdk/credential-provider-node": "^3.388.0", "@azure/search-documents": "^12.0.0", "@azure/storage-blob": "^12.15.0", "@browserbasehq/sdk": "*", "@browserbasehq/stagehand": "^1.0.0", "@clickhouse/client": "^0.2.5", "@cloudflare/ai": "*", "@datastax/astra-db-ts": "^1.0.0", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", "@getzep/zep-cloud": "^1.0.6", "@getzep/zep-js": "^0.9.0", "@gomomento/sdk": "^1.51.1", "@gomomento/sdk-core": "^1.51.1", "@google-ai/generativelanguage": "*", "@google-cloud/storage": "^6.10.1 || ^7.7.0", "@gradientai/nodejs-sdk": "^1.2.0", "@huggingface/inference": "^4.0.5", "@huggingface/transformers": "^3.5.2", "@ibm-cloud/watsonx-ai": "*", "@lancedb/lancedb": "^0.19.1", "@langchain/core": ">=0.3.58 <0.4.0", "@layerup/layerup-security": "^1.5.12", "@libsql/client": "^0.14.0", "@mendable/firecrawl-js": "^1.4.3", "@mlc-ai/web-llm": "*", "@mozilla/readability": "*", "@neondatabase/serverless": "*", "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", "@pinecone-database/pinecone": "*", "@planetscale/database": "^1.8.0", "@premai/prem-sdk": "^0.3.25", "@qdrant/js-client-rest": "^1.15.0", "@raycast/api": "^1.55.2", "@rockset/client": "^0.9.1", "@smithy/eventstream-codec": "^2.0.5", "@smithy/protocol-http": "^3.0.6", "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@spider-cloud/spider-client": "^0.0.21", "@supabase/supabase-js": "^2.45.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", "@upstash/ratelimit": "^1.1.3 || ^2.0.3", "@upstash/redis": "^1.20.6", "@upstash/vector": "^1.1.1", "@vercel/kv": "*", "@vercel/postgres": "*", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.28.0", "@zilliz/milvus2-sdk-node": ">=2.3.5", "apify-client": "^2.7.1", "assemblyai": "^4.6.0", "azion": "^1.11.1", "better-sqlite3": ">=9.4.0 <12.0.0", "cassandra-driver": "^4.7.2", "cborg": "^4.1.1", "cheerio": "^1.0.0-rc.12", "chromadb": "*", "closevector-common": "0.1.3", "closevector-node": "0.1.6", "closevector-web": "0.1.6", "cohere-ai": "*", "convex": "^1.3.1", "crypto-js": "^4.2.0", "d3-dsv": "^2.0.0", "discord.js": "^14.14.1", "duck-duck-scrape": "^2.2.5", "epub2": "^3.0.1", "fast-xml-parser": "*", "firebase-admin": "^11.9.0 || ^12.0.0 || ^13.0.0", "google-auth-library": "*", "googleapis": "*", "hnswlib-node": "^3.0.0", "html-to-text": "^9.0.5", "ibm-cloud-sdk-core": "*", "ignore": "^5.2.0", "interface-datastore": "^8.2.11", "ioredis": "^5.3.2", "it-all": "^3.0.4", "jsdom": "*", "jsonwebtoken": "^9.0.2", "llmonitor": "^0.5.9", "lodash": "^4.17.21", "lunary": "^0.7.10", "mammoth": "^1.6.0", "mariadb": "^3.4.0", "mem0ai": "^2.1.8", "mongodb": "^6.17.0", "mysql2": "^3.9.8", "neo4j-driver": "*", "notion-to-md": "^3.1.0", "officeparser": "^4.0.4", "openai": "*", "pdf-parse": "1.1.1", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", "pickleparser": "^0.2.1", "playwright": "^1.32.1", "portkey-ai": "^0.1.11", "puppeteer": "*", "pyodide": ">=0.24.1 <0.27.0", "redis": "*", "replicate": "*", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.3", "typeorm": "^0.3.20", "typesense": "^1.5.3", "usearch": "^1.1.1", "voy-search": "0.6.2", "weaviate-client": "^3.5.2", "web-auth-library": "^1.0.3", "word-extractor": "*", "ws": "^8.14.2", "youtubei.js": "*" }, "optionalPeers": ["@arcjet/redact", "@aws-crypto/sha256-js", "@aws-sdk/client-bedrock-agent-runtime", "@aws-sdk/client-bedrock-runtime", "@aws-sdk/client-dynamodb", "@aws-sdk/client-kendra", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sagemaker-runtime", "@aws-sdk/client-sfn", "@aws-sdk/credential-provider-node", "@azure/search-documents", "@azure/storage-blob", "@browserbasehq/sdk", "@clickhouse/client", "@cloudflare/ai", "@datastax/astra-db-ts", "@elastic/elasticsearch", "@getmetal/metal-sdk", "@getzep/zep-cloud", "@getzep/zep-js", "@gomomento/sdk", "@gomomento/sdk-core", "@google-ai/generativelanguage", "@google-cloud/storage", "@gradientai/nodejs-sdk", "@huggingface/inference", "@huggingface/transformers", "@lancedb/lancedb", "@layerup/layerup-security", "@libsql/client", "@mendable/firecrawl-js", "@mlc-ai/web-llm", "@mozilla/readability", "@neondatabase/serverless", "@notionhq/client", "@opensearch-project/opensearch", "@pinecone-database/pinecone", "@planetscale/database", "@premai/prem-sdk", "@qdrant/js-client-rest", "@raycast/api", "@rockset/client", "@smithy/eventstream-codec", "@smithy/protocol-http", "@smithy/signature-v4", "@smithy/util-utf8", "@spider-cloud/spider-client", "@supabase/supabase-js", "@tensorflow-models/universal-sentence-encoder", "@tensorflow/tfjs-converter", "@tensorflow/tfjs-core", "@upstash/ratelimit", "@upstash/redis", "@upstash/vector", "@vercel/kv", "@vercel/postgres", "@writerai/writer-sdk", "@xata.io/client", "@zilliz/milvus2-sdk-node", "apify-client", "assemblyai", "azion", "better-sqlite3", "cassandra-driver", "cborg", "cheerio", "chromadb", "closevector-common", "closevector-node", "closevector-web", "cohere-ai", "convex", "crypto-js", "d3-dsv", "discord.js", "duck-duck-scrape", "epub2", "fast-xml-parser", "firebase-admin", "google-auth-library", "googleapis", "hnswlib-node", "html-to-text", "ignore", "interface-datastore", "ioredis", "it-all", "jsdom", "jsonwebtoken", "llmonitor", "lodash", "lunary", "mammoth", "mariadb", "mem0ai", "mongodb", "mysql2", "neo4j-driver", "notion-to-md", "officeparser", "pdf-parse", "pg", "pg-copy-streams", "pickleparser", "playwright", "portkey-ai", "puppeteer", "pyodide", "redis", "replicate", "sonix-speech-recognition", "srt-parser-2", "typeorm", "typesense", "usearch", "voy-search", "weaviate-client", "web-auth-library", "word-extractor", "ws", "youtubei.js"] }, "sha512-xUe5UIlh1yZjt/cMtdSVlCoC5xm/RMN/rp+KZGLbquvjQeONmQ2rvpCqWjAOgQ6SPLqKiXvoXaKSm20r+LHISw=="], "@langchain/core": ["@langchain/core@0.3.53", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.16", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.22.3" } }, "sha512-rHlBcEG5PNaWxlVhPTLiZ0WRCr/URNEUynhgZTZ8QbTJhQ1vEMibdr2YL9LYKHSXNyAp/b5j3itcu3epB8FD7Q=="], @@ -276,19 +281,19 @@ "@llama-flow/core": ["@llama-flow/core@0.4.4", "", { "peerDependencies": { "@modelcontextprotocol/sdk": "^1.7.0", "hono": "^4.7.4", "next": "^15.2.2", "p-retry": "^6.2.1", "rxjs": "^7.8.2", "zod": "^3.24.2" }, "optionalPeers": ["@modelcontextprotocol/sdk", "hono", "next", "p-retry", "rxjs", "zod"] }, "sha512-hwK1EQ+atUG/E7XcDV3KsTaA8op29pb8gbpVurpsqbLnGFkdTT4F/6V7Hy1cC2o/yOY+DKc/rxoIsH1uJS0cZg=="], - "@llamaindex/cloud": ["@llamaindex/cloud@4.0.24", "", { "dependencies": { "p-retry": "^6.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@llama-flow/core": "^0.4.1", "@llamaindex/core": "0.6.15", "@llamaindex/env": "0.1.30" } }, "sha512-ryJm4U03DQwSCNUreF62cNrM/ika7BMRAcFhZHR5ExVsePJn19pKsVdDjriqZntgprDwpM7D3pkaP5DquIUAyw=="], + "@llamaindex/cloud": ["@llamaindex/cloud@4.1.3", "", { "dependencies": { "p-retry": "^6.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@llama-flow/core": "^0.4.1", "@llamaindex/core": "0.6.21", "@llamaindex/env": "0.1.30" } }, "sha512-O4MgnYMDwSBYhmYAz067Xn8+QKb/QPJnyOqdRzY5qr6pV4jaygcvSM4XkUDyQLR0Vgxzi1waPsvUPBwWbP3l4Q=="], - "@llamaindex/core": ["@llamaindex/core@0.6.15", "", { "dependencies": { "@llamaindex/env": "0.1.30", "@types/node": "^24.0.13", "magic-bytes.js": "^1.10.0", "zod": "^3.25.76", "zod-to-json-schema": "^3.24.6" } }, "sha512-vJSX3TywgcS7pGbJgLq778n2p9c8rvlMYbxlzAy1/NP4Vz5KWlaW48B3s+TO1V4mf2U0Vv6Ou7IFgeU1ANPzYA=="], + "@llamaindex/core": ["@llamaindex/core@0.6.21", "", { "dependencies": { "@finom/zod-to-json-schema": "3.24.11", "@llamaindex/env": "0.1.30", "@types/node": "^24.0.13", "magic-bytes.js": "^1.10.0", "zod": "^4.1.5" } }, "sha512-CtR7k5hVyH3AraXNvtjCxbNTJhjyrzdyLhfiFWtVu2a9+ct8uRYqM8YGHBsG6qgYtQUQjfZPWvo1nXpig9UCOw=="], "@llamaindex/env": ["@llamaindex/env@0.1.30", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "js-tiktoken": "^1.0.12", "pathe": "^1.1.2" }, "peerDependencies": { "@huggingface/transformers": "^3.5.0", "gpt-tokenizer": "^2.5.0" }, "optionalPeers": ["@huggingface/transformers", "gpt-tokenizer"] }, "sha512-y6kutMcCevzbmexUgz+HXf7KiZemzAoFEYSjAILfR+cG6FmYSF8XvLbGOB34Kx8mlRi7EI8rZXpezJ5qCqOyZg=="], - "@llamaindex/node-parser": ["@llamaindex/node-parser@2.0.15", "", { "dependencies": { "html-to-text": "^9.0.5" }, "peerDependencies": { "@llamaindex/core": "0.6.15", "@llamaindex/env": "0.1.30", "tree-sitter": "^0.22.0", "web-tree-sitter": "^0.24.3" } }, "sha512-Ics2Yfl+KUroRjqTJ2nXCY0EJXHogwccV28MzDOsvXoOHRdJMoq7f6bu5JaLExM0F0CNL14HDWZKChFYKkzzgg=="], + "@llamaindex/node-parser": ["@llamaindex/node-parser@2.0.21", "", { "dependencies": { "html-to-text": "^9.0.5" }, "peerDependencies": { "@llamaindex/core": "0.6.21", "@llamaindex/env": "0.1.30", "tree-sitter": "^0.22.0", "web-tree-sitter": "^0.24.3" } }, "sha512-TtUjYdvc2HJ/WWdS4N4ZdPsldgUUZKOOPpoVW6SdJBo3h0CfwHIbX/0wG26UqyJu7F8Pvu317GLoAJI4WUxyhg=="], - "@llamaindex/openai": ["@llamaindex/openai@0.4.15", "", { "dependencies": { "openai": "^5.12.0" }, "peerDependencies": { "@llamaindex/core": "0.6.19", "@llamaindex/env": "0.1.30" } }, "sha512-NV9i5dUKv8n504ytDvOkso6JZNvcLCy/Y0VuOgtP+MdNlitwuHxmBr7OX1rj4fpNgBYj0MPsEs3gGWgEnUAmMw=="], + "@llamaindex/openai": ["@llamaindex/openai@0.4.20", "", { "dependencies": { "openai": "^5.12.0" }, "peerDependencies": { "@llamaindex/core": "0.6.22", "@llamaindex/env": "0.1.30" } }, "sha512-b2wTBkSELAszdJ6Eh2KrLHZvcDQ5UUotaThyNq76b22rYEBs2YOgVbbLUBXXWOLxkEHntVRt99ZcVtsOYlLg+w=="], - "@llamaindex/workflow": ["@llamaindex/workflow@1.1.15", "", { "dependencies": { "@llamaindex/workflow-core": "^1.0.0" }, "peerDependencies": { "@llamaindex/core": "0.6.15", "@llamaindex/env": "0.1.30", "zod": "^3.25.67", "zod-to-json-schema": "^3.24.6" } }, "sha512-HUsFSiDzgi1+SVbVcta2/JyZjJgYDWOlv4n90NSundzZbajKwtGtKgA7a6EMF7Ds4LtyDWWnMoaxbhmsZFwn1Q=="], + "@llamaindex/workflow": ["@llamaindex/workflow@1.1.23", "", { "dependencies": { "@llamaindex/workflow-core": "^1.3.2" }, "peerDependencies": { "@llamaindex/core": "0.6.21", "@llamaindex/env": "0.1.30" } }, "sha512-XlXM/FQo3iHvqlEFxW+QR4EYKcFHjh+7YB7cCO6kJMuTtLM0JHrTDKwvV7zC533tP+YktC20Y7bCzXKuMM13zA=="], - "@llamaindex/workflow-core": ["@llamaindex/workflow-core@1.1.0", "", { "dependencies": { "simple-async-context": "^1.0.4" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.7.0", "hono": "^4.7.4", "next": "^15.2.2", "p-retry": "^6.2.1", "rxjs": "^7.8.2", "zod": "^3.24.2" }, "optionalPeers": ["@modelcontextprotocol/sdk", "hono", "next", "p-retry", "rxjs", "zod"] }, "sha512-ZnATVh1ECdon1PRn0hddK24nzm12ttHuXDUIIF73CU68xICqxyHSlukdcpKFY+SAH9CxnoSWJH/SwS+wST1gKA=="], + "@llamaindex/workflow-core": ["@llamaindex/workflow-core@1.3.3", "", { "peerDependencies": { "@modelcontextprotocol/sdk": "^1.7.0", "hono": "^4.7.4", "next": "^15.2.2", "p-retry": "^6.2.1", "rxjs": "^7.8.2", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@modelcontextprotocol/sdk", "hono", "next", "p-retry", "rxjs", "zod"] }, "sha512-WJIcD4K2suGbNkwU5CC70jKKrA5tARba42nMs8Pou1RGzmoxqg+K+b7vyLBmiDtImR8P40YLmkayCIRVQPBmsg=="], "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.11.0", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.3", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ=="], @@ -446,8 +451,6 @@ "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - "@types/diff-match-patch": ["@types/diff-match-patch@1.0.36", "", {}, "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg=="], - "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -534,6 +537,8 @@ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.7.2", "", { "os": "win32", "cpu": "x64" }, "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA=="], + "@vercel/oidc": ["@vercel/oidc@3.0.1", "", {}, "sha512-V/YRVrJDqM6VaMBjRUrd6qRMrTKvZjHdVdEmdXsOZMulTa3iK98ijKTc3wldBmst6W5rHpqMoKllKcBAHgN7GQ=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "abort-controller-x": ["abort-controller-x@0.4.3", "", {}, "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA=="], @@ -550,7 +555,7 @@ "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "ai": ["ai@4.3.19", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/react": "1.2.12", "@ai-sdk/ui-utils": "1.2.11", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["react"] }, "sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q=="], + "ai": ["ai@5.0.33", "", { "dependencies": { "@ai-sdk/gateway": "1.0.18", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.8", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-qmYQTb+K0204mawkjhCMGYPutDqPgmCeh/tQ9I3FpZfxvUe8R462D/MQUgLMFnMQ0z2kpUMoOJBKX6dSKb0OwA=="], "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], @@ -592,7 +597,7 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "auth0": ["auth0@4.23.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-P6X6mGEoBJN4XkocValU+cJglYMLFBvXAvEHUgpHD4iWwnStXmHgWI3hykL96ODj9NekRWWECdq+cWyXHUgJOg=="], + "auth0": ["auth0@4.31.0", "", { "dependencies": { "jose": "^4.13.2", "undici-types": "^6.15.0", "uuid": "^9.0.0" } }, "sha512-DO9ET/o4OILQHOfNPBnF+wP3zC9IGVeCTH3pCbTlmE7+3v8RfipxkkKJ/gW3tFPb3w8qkkZHTe/SzmDjjY/CEQ=="], "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], @@ -746,8 +751,6 @@ "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], - "diff-match-patch": ["diff-match-patch@1.0.5", "", {}, "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="], - "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], @@ -858,7 +861,7 @@ "eventsource": ["eventsource@3.0.6", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA=="], - "eventsource-parser": ["eventsource-parser@3.0.1", "", {}, "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA=="], + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], "expr-eval": ["expr-eval@2.0.2", "", {}, "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg=="], @@ -926,9 +929,9 @@ "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], + "gaxios": ["gaxios@7.1.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-Odju3uBUJyVCkW64nLD4wKLhbh93bh6vIg/ZIXkWiLPBrdgtc65+tls/qml+un3pr6JqYVFDZbbmLDQT68rTOQ=="], - "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], + "gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], @@ -950,11 +953,11 @@ "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], + "google-auth-library": ["google-auth-library@10.2.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-HMxFl2NfeHYnaL1HoRIN1XgorKS+6CDaM+z9LSSN+i/nKDDL4KFFEWogMXu7jV4HZQy2MsxpY+wA5XIf3w410A=="], "google-logging-utils": ["google-logging-utils@1.1.1", "", {}, "sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A=="], - "googleapis": ["googleapis@155.0.1", "", { "dependencies": { "google-auth-library": "^10.2.0", "googleapis-common": "^8.0.0" } }, "sha512-8FRHMufEkXqoLeqxF6CTezxIupvHuAGWHfBz3KzRgBrha6R8nf1ed1TPmk3/N8GYkCxueRmUziLPiqpshBlSxQ=="], + "googleapis": ["googleapis@161.0.0", "", { "dependencies": { "google-auth-library": "^10.2.0", "googleapis-common": "^8.0.0" } }, "sha512-JZy2cWMxgUF8E09KHzplI+z+FVG8NWDB/bsf4xevt9Um4bInb0X1qaG9qpDn49DHT5HsU0mOp3EOBGb8+AdE3Q=="], "googleapis-common": ["googleapis-common@8.0.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^7.0.0-rc.4", "google-auth-library": "^10.1.0", "qs": "^6.7.0", "url-template": "^2.0.8" } }, "sha512-66if47It7y+Sab3HMkwEXx1kCq9qUC9px8ZXoj1CMrmLmUw81GpbnsNlXnlyZyGbGPGcj+tDD9XsZ23m7GLaJQ=="], @@ -968,7 +971,7 @@ "graphql-request": ["graphql-request@6.1.0", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "cross-fetch": "^3.1.5" }, "peerDependencies": { "graphql": "14 - 16" } }, "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw=="], - "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], + "gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], @@ -1086,8 +1089,6 @@ "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=="], @@ -1112,7 +1113,7 @@ "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - "jose": ["jose@6.0.11", "", {}, "sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg=="], + "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], "js-tiktoken": ["js-tiktoken@1.0.20", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A=="], @@ -1134,8 +1135,6 @@ "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "jsondiffpatch": ["jsondiffpatch@0.6.0", "", { "dependencies": { "@types/diff-match-patch": "^1.0.36", "chalk": "^5.3.0", "diff-match-patch": "^1.0.5" }, "bin": { "jsondiffpatch": "bin/jsondiffpatch.js" } }, "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ=="], - "jsonpointer": ["jsonpointer@5.0.1", "", {}, "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="], "jsonwebtoken": ["jsonwebtoken@9.0.2", "", { "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ=="], @@ -1150,7 +1149,7 @@ "langchain": ["langchain@0.3.24", "", { "dependencies": { "@langchain/openai": ">=0.1.0 <0.6.0", "@langchain/textsplitters": ">=0.0.0 <0.2.0", "js-tiktoken": "^1.0.12", "js-yaml": "^4.1.0", "jsonpointer": "^5.0.1", "langsmith": "^0.3.16", "openapi-types": "^12.1.3", "p-retry": "4", "uuid": "^10.0.0", "yaml": "^2.2.1", "zod": "^3.22.4", "zod-to-json-schema": "^3.22.3" }, "peerDependencies": { "@langchain/anthropic": "*", "@langchain/aws": "*", "@langchain/cerebras": "*", "@langchain/cohere": "*", "@langchain/core": ">=0.2.21 <0.4.0", "@langchain/deepseek": "*", "@langchain/google-genai": "*", "@langchain/google-vertexai": "*", "@langchain/google-vertexai-web": "*", "@langchain/groq": "*", "@langchain/mistralai": "*", "@langchain/ollama": "*", "@langchain/xai": "*", "axios": "*", "cheerio": "*", "handlebars": "^4.7.8", "peggy": "^3.0.2", "typeorm": "*" }, "optionalPeers": ["@langchain/anthropic", "@langchain/aws", "@langchain/cerebras", "@langchain/cohere", "@langchain/deepseek", "@langchain/google-genai", "@langchain/google-vertexai", "@langchain/google-vertexai-web", "@langchain/groq", "@langchain/mistralai", "@langchain/ollama", "@langchain/xai", "axios", "cheerio", "handlebars", "peggy", "typeorm"] }, "sha512-BTjiYkUCpWFAmufK8J5zMqc5aUs4eEnAXPWtPe2+R4ZPP+U7bXJSBHAcrB40rQ3VeTdRgMvgDjekOOgCMWut6Q=="], - "langsmith": ["langsmith@0.3.52", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "@opentelemetry/api": "*", "@opentelemetry/exporter-trace-otlp-proto": "*", "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/exporter-trace-otlp-proto", "@opentelemetry/sdk-trace-base", "openai"] }, "sha512-GxKl1uxCJa/PbB0CtzpfYtGIYQBQrrdTjkcIqrL5eCldOb4ro2jiqC0HbkVcs1ytK3Xe+SHoA0NUv062XXto/g=="], + "langsmith": ["langsmith@0.3.72", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "@opentelemetry/api": "*", "@opentelemetry/exporter-trace-otlp-proto": "*", "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/exporter-trace-otlp-proto", "@opentelemetry/sdk-trace-base", "openai"] }, "sha512-XjTonMq2fIebzV0BRlPx8mi+Ih/NsQT6W484hrW/pJYuq0aT5kpLtzQthVVmsXH8ZYYkgkbQ5Gh5Mz1qoCrAwg=="], "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], @@ -1164,7 +1163,7 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "llamaindex": ["llamaindex@0.11.19", "", { "dependencies": { "@llamaindex/cloud": "4.0.24", "@llamaindex/core": "0.6.15", "@llamaindex/env": "0.1.30", "@llamaindex/node-parser": "2.0.15", "@llamaindex/workflow": "1.1.15", "@types/lodash": "^4.17.7", "@types/node": "^24.0.13", "lodash": "^4.17.21", "magic-bytes.js": "^1.10.0" } }, "sha512-qwFdwOZWa3VIH9pfz7aotwBGxnM9o5DSDvv26fTW37iaOH+qgdIn4u8gsCSYcgxN5dFQIBHajpwvyUMLA9w8YA=="], + "llamaindex": ["llamaindex@0.11.29", "", { "dependencies": { "@llamaindex/cloud": "4.1.3", "@llamaindex/core": "0.6.21", "@llamaindex/env": "0.1.30", "@llamaindex/node-parser": "2.0.21", "@llamaindex/workflow": "1.1.23", "@types/lodash": "^4.17.7", "@types/node": "^24.0.13", "lodash": "^4.17.21", "magic-bytes.js": "^1.10.0" } }, "sha512-QpUEXuk/Qt2sODmKSxobbgknVu/g2g1wduRoJxZGw2wmnw9NWMITPEghn/85+pkXKH1xl/cNPrm2o0i5qzOY+Q=="], "llm-chunk": ["llm-chunk@0.0.1", "", {}, "sha512-n9fHgsSiJb7vXZiC5c4XV6rme+tC7WX/cWH6EJvPPmMOMwOZ9xdg/U9LY5Qhmixd3K1PdRB0FVOdzoJF2HUZbg=="], @@ -1362,7 +1361,7 @@ "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - "openai": ["openai@4.97.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q=="], + "openai": ["openai@5.12.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-vUdt02xiWgOHiYUmW0Hj1Qu9OKAiVQu5Bd547ktVCiMKC1BkB5L3ImeEnCyq3WpRKR6ZTaPgekzqdozwdPs7Lg=="], "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], @@ -1574,8 +1573,6 @@ "scheduler": ["scheduler@0.25.0", "", {}, "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA=="], - "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -1610,8 +1607,6 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-async-context": ["simple-async-context@1.0.4", "", {}, "sha512-OPH9mLzjbamUjRYDf2Xk/KA72nbhzraJrc9NZl0eLC5/npJR2dpC4tGAXrPbZw7WPjoAlv45N27t9uL6WtwV+A=="], - "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], "simple-wcswidth": ["simple-wcswidth@1.0.1", "", {}, "sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg=="], @@ -1854,32 +1849,24 @@ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + "zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@ai-sdk/gateway/@ai-sdk/provider": ["@ai-sdk/provider@2.0.0", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA=="], - - "@ai-sdk/gateway/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.2", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-0a5a6VafkV6+0irdpqnub8WE6qzG2VMsDBpXb9NQIz8c4TG8fI+GSTFIL9sqrLEwXrHdiRj7fwJsrir4jClL0w=="], - - "@ai-sdk/llamaindex/ai": ["ai@5.0.11", "", { "dependencies": { "@ai-sdk/gateway": "1.0.5", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.2", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-PtiQAnhlWuN3Y2z9PifM/9XIQ0HIoHjZqEu7zHffyGEXiqHLtrJpt4IiGVzUTAKxXM5JCtO9sD/hwGXDp7ZYsw=="], - - "@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "@ai-sdk/ui-utils/zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], + "@ai-sdk/llamaindex/ai": ["ai@5.0.60", "", { "dependencies": { "@ai-sdk/gateway": "1.0.33", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.10", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-80U/3kmdBW6g+JkLXpz/P2EwkyEaWlPlYtuLUpx/JYK9F7WZh9NnkYoh1KvUi1Sbpo0NyurBTvX0a2AG9mmbDA=="], "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@auth0/ai/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - - "@auth0/ai/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], - - "@auth0/ai-vercel/zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], + "@auth0/nextjs-auth0/jose": ["jose@6.0.11", "", {}, "sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg=="], "@browserbasehq/sdk/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], + "@browserbasehq/stagehand/openai": ["openai@4.97.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q=="], + "@browserbasehq/stagehand/ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], + "@browserbasehq/stagehand/zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], @@ -1894,18 +1881,24 @@ "@langchain/core/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "@langchain/core/zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + + "@langchain/openai/openai": ["openai@4.97.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q=="], + "@langchain/openai/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "@langchain/openai/zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + "@llamaindex/cloud/p-retry": ["p-retry@6.2.1", "", { "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ=="], "@llamaindex/core/@types/node": ["@types/node@24.0.15", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA=="], - "@llamaindex/core/zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], - - "@llamaindex/openai/openai": ["openai@5.12.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-vUdt02xiWgOHiYUmW0Hj1Qu9OKAiVQu5Bd547ktVCiMKC1BkB5L3ImeEnCyq3WpRKR6ZTaPgekzqdozwdPs7Lg=="], + "@llamaindex/core/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], "@modelcontextprotocol/sdk/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], "@types/node-fetch/form-data": ["form-data@4.0.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="], @@ -1946,32 +1939,24 @@ "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + "eventsource/eventsource-parser": ["eventsource-parser@3.0.1", "", {}, "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA=="], + "express/mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "fetch-blob/web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], - "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "gcp-metadata/google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + "gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "googleapis/google-auth-library": ["google-auth-library@10.2.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-HMxFl2NfeHYnaL1HoRIN1XgorKS+6CDaM+z9LSSN+i/nKDDL4KFFEWogMXu7jV4HZQy2MsxpY+wA5XIf3w410A=="], - - "googleapis-common/gaxios": ["gaxios@7.1.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-Odju3uBUJyVCkW64nLD4wKLhbh93bh6vIg/ZIXkWiLPBrdgtc65+tls/qml+un3pr6JqYVFDZbbmLDQT68rTOQ=="], - - "googleapis-common/google-auth-library": ["google-auth-library@10.2.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^7.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-HMxFl2NfeHYnaL1HoRIN1XgorKS+6CDaM+z9LSSN+i/nKDDL4KFFEWogMXu7jV4HZQy2MsxpY+wA5XIf3w410A=="], - "ibm-cloud-sdk-core/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "ibm-cloud-sdk-core/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], "is-bun-module/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], - "jsondiffpatch/chalk": ["chalk@5.5.0", "", {}, "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg=="], - "jsonwebtoken/jws": ["jws@3.2.2", "", { "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA=="], "jsonwebtoken/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], @@ -1980,6 +1965,8 @@ "langchain/zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + "langchain/zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + "langsmith/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], "llamaindex/@types/node": ["@types/node@24.0.15", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA=="], @@ -1992,7 +1979,7 @@ "npm-run-all/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], - "openai/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], + "openid-client/jose": ["jose@6.0.11", "", {}, "sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], @@ -2036,18 +2023,16 @@ "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "@ai-sdk/gateway/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.3", "", {}, "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA=="], - - "@ai-sdk/gateway/@ai-sdk/provider-utils/zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], - - "@ai-sdk/llamaindex/ai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.0", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA=="], + "@ai-sdk/llamaindex/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@1.0.33", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.10", "@vercel/oidc": "^3.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-v9i3GPEo4t3fGcSkQkc07xM6KJN75VUv7C1Mqmmsu2xD8lQwnQfsrgAXyNuWe20yGY0eHuheSPDZhiqsGKtH1g=="], - "@ai-sdk/llamaindex/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.2", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-0a5a6VafkV6+0irdpqnub8WE6qzG2VMsDBpXb9NQIz8c4TG8fI+GSTFIL9sqrLEwXrHdiRj7fwJsrir4jClL0w=="], + "@ai-sdk/llamaindex/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.10", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.5" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-T1gZ76gEIwffep6MWI0QNy9jgoybUHE7TRaHB5k54K8mF91ciGFlbtCGxDYhMH3nCRergKwYFIDeFF0hJSIQHQ=="], "@anthropic-ai/sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "@browserbasehq/sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + "@browserbasehq/stagehand/openai/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], @@ -2096,6 +2081,8 @@ "@langchain/core/langsmith/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "@langchain/openai/openai/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], + "@llamaindex/cloud/p-retry/@types/retry": ["@types/retry@0.12.2", "", {}, "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow=="], "@llamaindex/core/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], @@ -2120,18 +2107,6 @@ "glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "googleapis-common/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - - "googleapis-common/google-auth-library/gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], - - "googleapis-common/google-auth-library/gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], - - "googleapis/google-auth-library/gaxios": ["gaxios@7.1.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-Odju3uBUJyVCkW64nLD4wKLhbh93bh6vIg/ZIXkWiLPBrdgtc65+tls/qml+un3pr6JqYVFDZbbmLDQT68rTOQ=="], - - "googleapis/google-auth-library/gcp-metadata": ["gcp-metadata@7.0.1", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ=="], - - "googleapis/google-auth-library/gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="], - "ibm-cloud-sdk-core/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "jsonwebtoken/jws/jwa": ["jwa@1.4.1", "", { "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA=="], @@ -2154,8 +2129,6 @@ "npm-run-all/cross-spawn/which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], - "openai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "protobufjs/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], @@ -2174,16 +2147,14 @@ "yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@ai-sdk/llamaindex/ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.3", "", {}, "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA=="], + "@browserbasehq/stagehand/openai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "@ai-sdk/llamaindex/ai/@ai-sdk/provider-utils/zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], + "@langchain/openai/openai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "googleapis/google-auth-library/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - "npm-run-all/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], diff --git a/ts-llamaindex/langgraph.json b/ts-llamaindex/langgraph.json deleted file mode 100644 index dd8e471..0000000 --- a/ts-llamaindex/langgraph.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "node_version": "20", - "graphs": { - "agent": "./src/lib/agent.ts:agent" - }, - "env": ".env.local", - "dependencies": ["."] -} diff --git a/ts-llamaindex/package.json b/ts-llamaindex/package.json index e7a57d6..44d4492 100644 --- a/ts-llamaindex/package.json +++ b/ts-llamaindex/package.json @@ -22,28 +22,29 @@ "node": ">=18" }, "dependencies": { - "@ai-sdk/llamaindex": "1.0.11", - "@ai-sdk/react": "1.2.12", - "@auth0/ai-llamaindex": "3.2.0", - "@auth0/ai-vercel": "3.5.0", + "@ai-sdk/llamaindex": "^1.0.28", + "@ai-sdk/react": "2.0.33", + "@auth0/ai-llamaindex": "file:auth0-ai-llamaindex-0.0.0.tgz", + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", + "@auth0/ai-vercel": "file:auth0-ai-vercel-0.0.0.tgz", "@auth0/nextjs-auth0": "4.9.0", - "@langchain/community": "0.3.49", - "@llamaindex/openai": "^0.4.15", + "@langchain/community": "^0.3.53", + "@llamaindex/openai": "^0.4.18", "@radix-ui/react-avatar": "^1.1.7", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dialog": "^1.1.11", "@radix-ui/react-dropdown-menu": "^2.1.12", "@radix-ui/react-popover": "^1.1.11", "@radix-ui/react-slot": "^1.2.0", - "ai": "4.3.19", + "ai": "5.0.33", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", "dotenv": "^17.0.1", "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", - "googleapis": "155.0.1", - "llamaindex": "^0.11", + "googleapis": "^161.0.0", + "llamaindex": "^0.11.28", "llm-chunk": "0.0.1", "lucide-react": "^0.475.0", "marked": "^15.0.7", @@ -64,7 +65,7 @@ "use-stick-to-bottom": "^1.0.44", "vaul": "^1.1.2", "zod": "3.25.76", - "zod-to-json-schema": "^3.23.2" + "zod-to-json-schema": "^3.24.5" }, "devDependencies": { "@next/bundle-analyzer": "^15.1.7", @@ -82,5 +83,9 @@ "tailwindcss": "3.4.17", "tsx": "^4.19.4", "typescript": "5.7.3" + }, + "resolutions": { + "@auth0/ai": "file:auth0-ai-0.0.0.tgz", + "@auth0/ai-vercel": "file:auth0-ai-vercel-0.0.0.tgz" } } diff --git a/ts-llamaindex/src/app/api/chat/route.ts b/ts-llamaindex/src/app/api/chat/route.ts index 376b77c..89ef8a2 100644 --- a/ts-llamaindex/src/app/api/chat/route.ts +++ b/ts-llamaindex/src/app/api/chat/route.ts @@ -1,5 +1,6 @@ import { NextRequest } from 'next/server'; -import { createDataStreamResponse, LlamaIndexAdapter, Message, ToolExecutionError } from 'ai'; +import { createUIMessageStream, createUIMessageStreamResponse, AISDKError, UIMessage } from 'ai'; +import { toUIMessageStream } from '@ai-sdk/llamaindex'; import { openai, OpenAIAgent } from '@llamaindex/openai'; import { ChatMessage } from 'llamaindex'; import { setAIContext } from '@auth0/ai-llamaindex'; @@ -15,12 +16,57 @@ import { getContextDocumentsTool } from '@/lib/tools/context-docs'; const date = new Date().toISOString(); -const AGENT_SYSTEM_TEMPLATE = `You are a personal assistant named Assistant0. You are a helpful assistant that can answer questions and help with tasks. You have access to a set of tools, use the tools as needed to answer the user's question. Render the email body as a markdown block, do not wrap it in code blocks. Today is ${date}.`; +const AGENT_SYSTEM_TEMPLATE = `You are a personal assistant named Assistant0. You are a helpful assistant that can answer questions and help with tasks. +You have access to a set of tools. When using tools, you MUST provide valid JSON arguments. Always format tool call arguments as proper JSON objects. +For example, when calling shop_online tool, format like this: +{"product": "iPhone", "qty": 1, "priceLimit": 1000} +Use the tools as needed to answer the user's question. Render the email body as a markdown block, do not wrap it in code blocks. Today is ${date}.`; + +// Convert UIMessage array to ChatMessage array for LlamaIndex +function convertUIMessagesToChatMessages(messages: UIMessage[]): ChatMessage[] { + return messages.map((message) => { + // Extract text content from UIMessage + let content = ''; + if (Array.isArray((message as any).parts)) { + content = (message as any).parts + .map((part: any) => { + if (typeof part === 'string') return part; + if (typeof part?.text === 'string') return part.text; + if (typeof part?.content === 'string') return part.content; + return ''; + }) + .join(''); + } else { + content = (message as any).content ?? ''; + } + + return { + role: message.role === 'user' ? 'user' : 'assistant', + content, + } as ChatMessage; + }); +} + +// Get the text content from the latest message +function getLatestMessageText(messages: UIMessage[]): string { + const lastMessage = messages[messages.length - 1]; + if (Array.isArray((lastMessage as any).parts)) { + return (lastMessage as any).parts + .map((part: any) => { + if (typeof part === 'string') return part; + if (typeof part?.text === 'string') return part.text; + if (typeof part?.content === 'string') return part.content; + return ''; + }) + .join(''); + } + return (lastMessage as any).content ?? ''; +} // Initialize agent once let assistant: any = null; -async function initializeAgent(sanitizedMessages: Message[] = []) { +async function initializeAgent(messages: UIMessage[] = []) { if (assistant) return assistant; try { @@ -38,7 +84,7 @@ async function initializeAgent(sanitizedMessages: Message[] = []) { llm: openai({ model: 'gpt-4.1' }), systemPrompt: AGENT_SYSTEM_TEMPLATE, tools, - chatHistory: sanitizedMessages as ChatMessage[], + chatHistory: convertUIMessagesToChatMessages(messages), verbose: true, }); @@ -53,26 +99,27 @@ async function initializeAgent(sanitizedMessages: Message[] = []) { * This handler initializes and calls an tool calling agent. */ export async function POST(req: NextRequest) { - const { id, messages }: { id: string; messages: Message[] } = await req.json(); + const { id, messages }: { id: string; messages: UIMessage[] } = await req.json(); - const sanitizedMessages = sanitizeMessages(messages); + // const sanitizedMessages = sanitizeMessages(messages); setAIContext({ threadID: id }); - return createDataStreamResponse({ + const stream = createUIMessageStream({ + originalMessages: messages, execute: withInterruptions( - async (dataStream) => { - const assistant = await initializeAgent(sanitizedMessages); + async ({ writer }) => { + const assistant = await initializeAgent(messages); const stream = await assistant.chat({ - message: sanitizedMessages[sanitizedMessages.length - 1].content, + message: getLatestMessageText(messages), stream: true, }); - LlamaIndexAdapter.mergeIntoDataStream(stream as any, { dataStream }); + writer.merge(toUIMessageStream(stream)); }, { - messages: sanitizedMessages, - errorType: ToolExecutionError, + messages: messages, + errorType: AISDKError, }, ), onError: errorSerializer((err: any) => { @@ -80,17 +127,6 @@ export async function POST(req: NextRequest) { return `An error occurred! ${err.message}`; }), }); -} -// Remove incomplete tool calls in messages -const sanitizeMessages = (messages: Message[]) => { - return messages.filter( - (message) => - !( - message.role === 'assistant' && - message.toolInvocations && - message.toolInvocations.length > 0 && - message.content === '' - ), - ); -}; + return createUIMessageStreamResponse({ stream }); +} \ No newline at end of file diff --git a/ts-llamaindex/src/components/auth0-ai/federated-connections/federated-connection-auth-props.tsx b/ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx similarity index 95% rename from ts-llamaindex/src/components/auth0-ai/federated-connections/federated-connection-auth-props.tsx rename to ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx index 19344cb..5c060ea 100644 --- a/ts-llamaindex/src/components/auth0-ai/federated-connections/federated-connection-auth-props.tsx +++ b/ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultAuthProps.tsx @@ -9,7 +9,7 @@ import { ReactNode } from 'react'; */ export type AuthComponentMode = 'redirect' | 'popup' | 'auto'; -export type FederatedConnectionAuthProps = { +export type TokenVaultAuthProps = { interrupt: { connection: string; requiredScopes: string[]; diff --git a/ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx b/ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx new file mode 100644 index 0000000..8c9dd3d --- /dev/null +++ b/ts-llamaindex/src/components/auth0-ai/TokenVault/TokenVaultInterruptHandler.tsx @@ -0,0 +1,33 @@ +import { useId } from 'react'; +import { TokenVaultInterrupt } from '@auth0/ai/interrupts'; +import type { Auth0InterruptionUI } from '@auth0/ai-vercel'; + +import { TokenVaultConsentPopup } from '@/components/auth0-ai/TokenVault/popup'; + +type PossibleInterrupt = Auth0InterruptionUI | Record; + +interface TokenVaultInterruptHandlerProps { + interrupt: PossibleInterrupt | undefined | null; + onFinish?: () => void; +} + +export function TokenVaultInterruptHandler({ interrupt, onFinish }: TokenVaultInterruptHandlerProps) { + const id = useId(); + if (!interrupt || !TokenVaultInterrupt.isInterrupt(interrupt)) { + return null; + } + + return ( +
+ +
+ ); +} diff --git a/ts-llamaindex/src/components/auth0-ai/TokenVault/index.tsx b/ts-llamaindex/src/components/auth0-ai/TokenVault/index.tsx new file mode 100644 index 0000000..f45f88f --- /dev/null +++ b/ts-llamaindex/src/components/auth0-ai/TokenVault/index.tsx @@ -0,0 +1,28 @@ +import { BrowserView, MobileView } from 'react-device-detect'; + +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; +import { TokenVaultConsentPopup } from './popup'; +import { TokenVaultConsentRedirect } from './redirect'; + +export function TokenVaultConsent(props: TokenVaultAuthProps) { + const { mode } = props; + + switch (mode) { + case 'popup': + return ; + case 'redirect': + return ; + case 'auto': + default: + return ( + <> + + + + + + + + ); + } +} diff --git a/ts-llamaindex/src/components/auth0-ai/federated-connections/popup.tsx b/ts-llamaindex/src/components/auth0-ai/TokenVault/popup.tsx similarity index 93% rename from ts-llamaindex/src/components/auth0-ai/federated-connections/popup.tsx rename to ts-llamaindex/src/components/auth0-ai/TokenVault/popup.tsx index 67b7e56..436777b 100644 --- a/ts-llamaindex/src/components/auth0-ai/federated-connections/popup.tsx +++ b/ts-llamaindex/src/components/auth0-ai/TokenVault/popup.tsx @@ -4,14 +4,14 @@ import { useCallback, useEffect, useState } from 'react'; import { WaitingMessage } from '../util/loader'; import { PromptUserContainer } from '../util/prompt-user-container'; -import { FederatedConnectionAuthProps } from './federated-connection-auth-props'; +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; -export function EnsureAPIAccessPopup({ +export function TokenVaultConsentPopup({ interrupt: { connection, requiredScopes, resume }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = '/auth/login', returnTo = '/close' } = {}, onFinish, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { const [isLoading, setIsLoading] = useState(false); const [loginPopup, setLoginPopup] = useState(null); diff --git a/ts-llamaindex/src/components/auth0-ai/federated-connections/redirect.tsx b/ts-llamaindex/src/components/auth0-ai/TokenVault/redirect.tsx similarity index 85% rename from ts-llamaindex/src/components/auth0-ai/federated-connections/redirect.tsx rename to ts-llamaindex/src/components/auth0-ai/TokenVault/redirect.tsx index bd32f5d..c29e635 100644 --- a/ts-llamaindex/src/components/auth0-ai/federated-connections/redirect.tsx +++ b/ts-llamaindex/src/components/auth0-ai/TokenVault/redirect.tsx @@ -1,13 +1,13 @@ 'use client'; import { PromptUserContainer } from '../util/prompt-user-container'; -import { FederatedConnectionAuthProps } from './federated-connection-auth-props'; +import { TokenVaultAuthProps } from './TokenVaultAuthProps'; -export function EnsureAPIAccessRedirect({ +export function TokenVaultConsentRedirect({ interrupt: { requiredScopes, connection }, connectWidget: { icon, title, description, action, containerClassName }, auth: { authorizePath = '/auth/login', returnTo = window.location.pathname } = {}, -}: FederatedConnectionAuthProps) { +}: TokenVaultAuthProps) { return ( ; - case 'redirect': - return ; - case 'auto': - default: - return ( - <> - - - - - - - - ); - } -} diff --git a/ts-llamaindex/src/components/auth0-ai/federated-connections/index.tsx b/ts-llamaindex/src/components/auth0-ai/federated-connections/index.tsx deleted file mode 100644 index 2d0ba17..0000000 --- a/ts-llamaindex/src/components/auth0-ai/federated-connections/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { FederatedConnectionInterrupt } from '@auth0/ai/interrupts'; -import type { Auth0InterruptionUI } from '@auth0/ai-vercel/react'; - -import { EnsureAPIAccess } from '@/components/auth0-ai/federated-connections/ensure-api-access'; - -interface FederatedConnectionInterruptHandlerProps { - interrupt: Auth0InterruptionUI | null; -} - -export function FederatedConnectionInterruptHandler({ interrupt }: FederatedConnectionInterruptHandlerProps) { - if (!FederatedConnectionInterrupt.isInterrupt(interrupt)) { - return null; - } - - return ( -
- -
- ); -} diff --git a/ts-llamaindex/src/components/chat-message-bubble.tsx b/ts-llamaindex/src/components/chat-message-bubble.tsx index 4e68c26..894b288 100644 --- a/ts-llamaindex/src/components/chat-message-bubble.tsx +++ b/ts-llamaindex/src/components/chat-message-bubble.tsx @@ -1,25 +1,154 @@ -import type { Message } from 'ai/react'; +import { type UIMessage } from 'ai'; import { MemoizedMarkdown } from './memoized-markdown'; import { cn } from '@/utils/cn'; +import { Loader2, CheckCircle, AlertCircle } from 'lucide-react'; + +function uiMessageToText(message: UIMessage): string { + if (Array.isArray((message as any).parts)) { + return (message as any).parts + .map((p: any) => { + if (typeof p === 'string') return p; + if (typeof p?.text === 'string') return p.text; + if (typeof p?.content === 'string') return p.content; + return ''; + }) + .join(''); + } + return (message as any).content ?? ''; +} + +function getToolCallsFromMessage(message: UIMessage): Array<{ + toolCallId: string; + toolName: string; + args: any; + result?: any; + status: 'pending' | 'complete' | 'error'; +}> { + const parts = (message as any).parts; + if (!Array.isArray(parts)) return []; + + const toolCalls: Array<{ + toolCallId: string; + toolName: string; + args: any; + result?: any; + status: 'pending' | 'complete' | 'error'; + }> = []; + + parts.forEach((part: any) => { + // Check if this part is a tool call (starts with "tool-") + if (part?.type && part.type.startsWith('tool-') && part.toolCallId) { + const toolName = part.type.replace('tool-', ''); + + // Determine status based on available information + let status: 'pending' | 'complete' | 'error' = 'pending'; + if (part.state === 'output-available' || part.output !== undefined) { + status = 'complete'; + } else if (part.state === 'error' || part.isError) { + status = 'error'; + } + + toolCalls.push({ + toolCallId: part.toolCallId, + toolName, + args: part.input || part.args || {}, + result: part.output || part.result, + status + }); + } + }); + + return toolCalls; +} + +function ToolCallDisplay({ toolCall }: { + toolCall: { + toolCallId: string; + toolName: string; + args: any; + result?: any; + status: 'pending' | 'complete' | 'error'; + } +}) { + const { toolName, args, result, status } = toolCall; + + return ( +
+
+ {status === 'pending' && } + {status === 'complete' && } + {status === 'error' && } + + {status === 'pending' && `Calling ${toolName}...`} + {status === 'complete' && `Called ${toolName}`} + {status === 'error' && `Error calling ${toolName}`} + +
+ + {/* Show tool arguments/input */} + {args && Object.keys(args).length > 0 && ( +
+
Input:
+
+ {Object.entries(args).map(([key, value]) => ( +
+ {key}:{' '} + + {typeof value === 'string' ? `"${value}"` : JSON.stringify(value)} + +
+ ))} +
+
+ )} + + {/* Show tool result/output */} + {result !== undefined && ( +
+
Output:
+
+ + {typeof result === 'string' ? result : JSON.stringify(result, null, 2)} + +
+
+ )} +
+ ); +} + +export function ChatMessageBubble(props: { message: UIMessage; aiEmoji?: string }) { + const { message, aiEmoji } = props; + const text = uiMessageToText(message); + const toolCalls = getToolCallsFromMessage(message); -export function ChatMessageBubble(props: { message: Message; aiEmoji?: string }) { return (
- {props.message.role !== 'user' && ( -
- {props.aiEmoji} + {message.role !== 'user' && ( +
+ {aiEmoji}
)}
- + {/* Render tool calls if present */} + {toolCalls.length > 0 && ( +
+ {toolCalls.map((toolCall, index) => ( + + ))} +
+ )} + + {/* Render text content if present */} + {text && }
); -} +} \ No newline at end of file diff --git a/ts-llamaindex/src/components/chat-window.tsx b/ts-llamaindex/src/components/chat-window.tsx index b371fac..8125c06 100644 --- a/ts-llamaindex/src/components/chat-window.tsx +++ b/ts-llamaindex/src/components/chat-window.tsx @@ -1,20 +1,20 @@ 'use client'; -import { type Message } from 'ai'; +import { type UIMessage, DefaultChatTransport, generateId } from 'ai'; import { useChat } from '@ai-sdk/react'; -import type { FormEvent, ReactNode } from 'react'; +import { useState, type FormEvent, type ReactNode } from 'react'; import { toast } from 'sonner'; import { StickToBottom, useStickToBottomContext } from 'use-stick-to-bottom'; import { ArrowDown, ArrowUpIcon, LoaderCircle } from 'lucide-react'; import { useInterruptions } from '@auth0/ai-vercel/react'; -import { FederatedConnectionInterruptHandler } from '@/components/auth0-ai/federated-connections'; +import { TokenVaultInterruptHandler } from '@/components/auth0-ai/TokenVault/TokenVaultInterruptHandler'; import { ChatMessageBubble } from '@/components/chat-message-bubble'; import { Button } from '@/components/ui/button'; import { cn } from '@/utils/cn'; function ChatMessages(props: { - messages: Message[]; + messages: UIMessage[]; emptyStateComponent: ReactNode; aiEmoji?: string; className?: string; @@ -112,10 +112,11 @@ export function ChatWindow(props: { placeholder?: string; emoji?: string; }) { - const chat = useInterruptions((handler) => + const { messages, sendMessage, status, toolInterrupt } = useInterruptions((handler) => // eslint-disable-next-line react-hooks/rules-of-hooks useChat({ - api: props.endpoint, + transport: new DefaultChatTransport({ api: props.endpoint }), + generateId, onError: handler((e: Error) => { console.error('Error: ', e); toast.error(`Error while processing your request`, { description: e.message }); @@ -123,14 +124,15 @@ export function ChatWindow(props: { }), ); - function isChatLoading(): boolean { - return chat.status === 'streaming'; - } + const [input, setInput] = useState(''); + + const isChatLoading = status === 'streaming'; - async function sendMessage(e: FormEvent) { + async function onSubmit(e: FormEvent) { e.preventDefault(); - if (isChatLoading()) return; - chat.handleSubmit(e); + if (!input.trim() || isChatLoading) return; + await sendMessage({ text: input }); + setInput(''); } return ( @@ -139,17 +141,17 @@ export function ChatWindow(props: { className="absolute inset-0" contentClassName="py-8 px-2" content={ - chat.messages.length === 0 ? ( + messages.length === 0 ? (
{props.emptyStateComponent}
) : ( <>
- +
) @@ -158,10 +160,10 @@ export function ChatWindow(props: {
setInput(e.target.value)} + onSubmit={onSubmit} + loading={isChatLoading} placeholder={props.placeholder ?? 'What can I help you with?'} >
diff --git a/ts-llamaindex/src/lib/auth0-ai.ts b/ts-llamaindex/src/lib/auth0-ai.ts index 2c2d6d9..305c11c 100644 --- a/ts-llamaindex/src/lib/auth0-ai.ts +++ b/ts-llamaindex/src/lib/auth0-ai.ts @@ -1,15 +1,15 @@ -import { Auth0AI, getAccessTokenForConnection } from '@auth0/ai-llamaindex'; +import { Auth0AI, getAccessTokenFromTokenVault } from '@auth0/ai-llamaindex'; import { AccessDeniedInterrupt } from '@auth0/ai/interrupts'; import { getRefreshToken, getUser } from './auth0'; // Get the access token for a connection via Auth0 -export const getAccessToken = async () => getAccessTokenForConnection(); +export const getAccessToken = async () => getAccessTokenFromTokenVault(); const auth0AI = new Auth0AI(); // Connection for Google services -export const withGoogleConnection = auth0AI.withTokenForConnection({ +export const withGoogleConnection = auth0AI.withTokenVault({ connection: 'google-oauth2', scopes: [ 'https://www.googleapis.com/auth/gmail.readonly', @@ -21,16 +21,30 @@ export const withGoogleConnection = auth0AI.withTokenForConnection({ }); // CIBA flow for user confirmation -export const withAsyncAuthorization = auth0AI.withAsyncUserConfirmation({ +export const withAsyncAuthorization = auth0AI.withAsyncAuthorization({ userID: async () => { const user = await getUser(); return user?.sub as string; }, bindingMessage: async ({ product, qty }) => `Do you want to buy ${qty} ${product}`, - scopes: ['openid', 'product:buy'], + scopes: ['openid', 'buy:product'], audience: process.env['AUDIENCE']!, /** + * Note: setting a requestedExpiry to >= 301 will currently ensure email is used. Otherwise, + * the default is to use push notification if available. + */ + // requestedExpiry: 301, + + /** + * The behavior when the authorization request is made. + * + * - `block`: The tool execution is blocked until the user completes the authorization. + * - `interrupt`: The tool execution is interrupted until the user completes the authorization. + * - a callback: Same as "block" but give access to the auth request and executing logic. + * + * Defaults to `interrupt`. + * * When this flag is set to `block`, the execution of the tool awaits * until the user approves or rejects the request. * @@ -40,7 +54,12 @@ export const withAsyncAuthorization = auth0AI.withAsyncUserConfirmation({ * In practice, the process that is awaiting the user confirmation * could crash or timeout before the user approves the request. */ - onAuthorizationRequest: 'block', + onAuthorizationRequest: async (authReq, creds) => { + console.log(`An authorization request was sent to your mobile device or your email.`); + await creds; + console.log(`Thanks for approving the order.`); + }, + onUnauthorized: async (e: Error) => { if (e instanceof AccessDeniedInterrupt) { return 'The user has denied the request'; diff --git a/ts-llamaindex/src/lib/fga/fga-init.ts b/ts-llamaindex/src/lib/fga/fga-init.ts index 9b6934f..a145659 100644 --- a/ts-llamaindex/src/lib/fga/fga-init.ts +++ b/ts-llamaindex/src/lib/fga/fga-init.ts @@ -1,4 +1,5 @@ import { buildOpenFgaClient } from '@auth0/ai'; +import { config } from 'dotenv'; /** * Initializes the OpenFgaClient, writes an authorization model, and configures pre-defined tuples. @@ -8,7 +9,7 @@ import { buildOpenFgaClient } from '@auth0/ai'; * 2. Writes an authorization model with specified schema version and type definitions. */ async function main() { - require('dotenv').config({ path: ['.env.local', '.env'] }); + config({ path: ['.env.local', '.env'] }); const fgaClient = buildOpenFgaClient(); diff --git a/ts-llamaindex/src/lib/tools/google-calender.ts b/ts-llamaindex/src/lib/tools/google-calender.ts index 12404ad..0e2bff2 100644 --- a/ts-llamaindex/src/lib/tools/google-calender.ts +++ b/ts-llamaindex/src/lib/tools/google-calender.ts @@ -3,7 +3,7 @@ import { endOfDay, formatISO, startOfDay } from 'date-fns'; import { GaxiosError } from 'gaxios'; import { google } from 'googleapis'; import { z } from 'zod'; -import { FederatedConnectionError } from '@auth0/ai/interrupts'; +import { TokenVaultError } from '@auth0/ai/interrupts'; import { getAccessToken, withGoogleConnection } from '../auth0-ai'; @@ -63,7 +63,7 @@ export const getCalendarEventsTool = withGoogleConnection( } catch (error) { if (error instanceof GaxiosError) { if (error.status === 401) { - throw new FederatedConnectionError(`Authorization required to access the Federated Connection`); + throw new TokenVaultError(`Authorization required to access the Token Vault connection.`); } } diff --git a/ts-llamaindex/src/lib/tools/shop-online.ts b/ts-llamaindex/src/lib/tools/shop-online.ts index bf9a81d..edb886e 100644 --- a/ts-llamaindex/src/lib/tools/shop-online.ts +++ b/ts-llamaindex/src/lib/tools/shop-online.ts @@ -1,7 +1,7 @@ import { tool } from 'llamaindex'; import { z } from 'zod'; -import { getCIBACredentials } from '@auth0/ai-vercel'; +import { getAsyncAuthorizationCredentials } from '@auth0/ai-vercel'; import { withAsyncAuthorization } from '../auth0-ai'; export const shopOnlineTool = withAsyncAuthorization( @@ -33,7 +33,7 @@ export const shopOnlineTool = withAsyncAuthorization( priceLimit, }; - const credentials = getCIBACredentials(); + const credentials = getAsyncAuthorizationCredentials(); const accessToken = credentials?.accessToken; if (accessToken) { diff --git a/ts-vercel-ai/bun.lock b/ts-vercel-ai/bun.lock index d916567..ad114f5 100644 --- a/ts-vercel-ai/bun.lock +++ b/ts-vercel-ai/bun.lock @@ -24,7 +24,6 @@ "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", "googleapis": "^161.0.0", - "jose": "^6.1.0", "llm-chunk": "^0.0.1", "lucide-react": "^0.475.0", "marked": "^15.0.7", @@ -1056,7 +1055,7 @@ "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - "jose": ["jose@6.1.0", "", {}, "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA=="], + "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], "js-tiktoken": ["js-tiktoken@1.0.20", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A=="], @@ -1746,14 +1745,10 @@ "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@auth0/ai/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "@auth0/ai-vercel/@ai-sdk/react": ["@ai-sdk/react@2.0.60", "", { "dependencies": { "@ai-sdk/provider-utils": "3.0.10", "ai": "5.0.60", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.25.76 || ^4.1.8" }, "optionalPeers": ["zod"] }, "sha512-Ev0MC0I7eDcCH4FnrHzK48g9bJjyF3F67MMq76qoVsbtcs6fGIO5RjmYgPoFeSo8/yQ5EM6i/14yfcD0oB+moA=="], "@auth0/ai-vercel/ai": ["ai@5.0.60", "", { "dependencies": { "@ai-sdk/gateway": "1.0.33", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.10", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-80U/3kmdBW6g+JkLXpz/P2EwkyEaWlPlYtuLUpx/JYK9F7WZh9NnkYoh1KvUi1Sbpo0NyurBTvX0a2AG9mmbDA=="], - "@auth0/nextjs-auth0/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "@browserbasehq/sdk/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "@browserbasehq/stagehand/ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], diff --git a/ts-vercel-ai/package.json b/ts-vercel-ai/package.json index 46b3148..2b614e0 100644 --- a/ts-vercel-ai/package.json +++ b/ts-vercel-ai/package.json @@ -41,7 +41,6 @@ "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.7.1", "googleapis": "^161.0.0", - "jose": "^6.1.0", "llm-chunk": "^0.0.1", "lucide-react": "^0.475.0", "marked": "^15.0.7", diff --git a/ts-vercel-ai/src/app/api/chat/route.ts b/ts-vercel-ai/src/app/api/chat/route.ts index 5554f1d..7d93fef 100644 --- a/ts-vercel-ai/src/app/api/chat/route.ts +++ b/ts-vercel-ai/src/app/api/chat/route.ts @@ -31,8 +31,6 @@ Use the tools as needed to answer the user's question. Render the email body as export async function POST(req: NextRequest) { const { id, messages }: { id: string; messages: Array } = await req.json(); - // const sanitizedMessages = sanitize(messages); - setAIContext({ threadID: id }); const tools = { @@ -90,12 +88,4 @@ export async function POST(req: NextRequest) { }); return createUIMessageStreamResponse({ stream }); -} - -// Vercel AI tends to get stuck when there are incomplete tool calls in messages -// function sanitize(messages: UIMessage[]) { -// return messages.filter( -// (m) => -// !(m.role === 'assistant' && Array.isArray(m.parts) && m.parts.length > 0 && !m.parts.some((p: any) => !!p?.text)), -// ); -// } +} \ No newline at end of file